165 lines
5.6 KiB
HTML
165 lines
5.6 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<html><head>
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||
|
<link href="sqlite.css" rel="stylesheet">
|
||
|
<title>Change in Default Page Size in SQLite Version 3.12.0</title>
|
||
|
<!-- path= -->
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class=nosearch>
|
||
|
<a href="index.html">
|
||
|
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
|
||
|
</a>
|
||
|
<div><!-- IE hack to prevent disappearing logo --></div>
|
||
|
<div class="tagline desktoponly">
|
||
|
Small. Fast. Reliable.<br>Choose any three.
|
||
|
</div>
|
||
|
<div class="menu mainmenu">
|
||
|
<ul>
|
||
|
<li><a href="index.html">Home</a>
|
||
|
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
|
||
|
<li class='wideonly'><a href='about.html'>About</a>
|
||
|
<li class='desktoponly'><a href="docs.html">Documentation</a>
|
||
|
<li class='desktoponly'><a href="download.html">Download</a>
|
||
|
<li class='wideonly'><a href='copyright.html'>License</a>
|
||
|
<li class='desktoponly'><a href="support.html">Support</a>
|
||
|
<li class='desktoponly'><a href="prosupport.html">Purchase</a>
|
||
|
<li class='search' id='search_menubutton'>
|
||
|
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<div class="menu submenu" id="submenu">
|
||
|
<ul>
|
||
|
<li><a href='about.html'>About</a>
|
||
|
<li><a href='docs.html'>Documentation</a>
|
||
|
<li><a href='download.html'>Download</a>
|
||
|
<li><a href='support.html'>Support</a>
|
||
|
<li><a href='prosupport.html'>Purchase</a>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<div class="searchmenu" id="searchmenu">
|
||
|
<form method="GET" action="search">
|
||
|
<select name="s" id="searchtype">
|
||
|
<option value="d">Search Documentation</option>
|
||
|
<option value="c">Search Changelog</option>
|
||
|
</select>
|
||
|
<input type="text" name="q" id="searchbox" value="">
|
||
|
<input type="submit" value="Go">
|
||
|
</form>
|
||
|
</div>
|
||
|
</div>
|
||
|
<script>
|
||
|
function toggle_div(nm) {
|
||
|
var w = document.getElementById(nm);
|
||
|
if( w.style.display=="block" ){
|
||
|
w.style.display = "none";
|
||
|
}else{
|
||
|
w.style.display = "block";
|
||
|
}
|
||
|
}
|
||
|
function toggle_search() {
|
||
|
var w = document.getElementById("searchmenu");
|
||
|
if( w.style.display=="block" ){
|
||
|
w.style.display = "none";
|
||
|
} else {
|
||
|
w.style.display = "block";
|
||
|
setTimeout(function(){
|
||
|
document.getElementById("searchbox").focus()
|
||
|
}, 30);
|
||
|
}
|
||
|
}
|
||
|
function div_off(nm){document.getElementById(nm).style.display="none";}
|
||
|
window.onbeforeunload = function(e){div_off("submenu");}
|
||
|
/* Disable the Search feature if we are not operating from CGI, since */
|
||
|
/* Search is accomplished using CGI and will not work without it. */
|
||
|
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
|
||
|
document.getElementById("search_menubutton").style.display = "none";
|
||
|
}
|
||
|
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
|
||
|
function hideorshow(btn,obj){
|
||
|
var x = document.getElementById(obj);
|
||
|
var b = document.getElementById(btn);
|
||
|
if( x.style.display!='none' ){
|
||
|
x.style.display = 'none';
|
||
|
b.innerHTML='show';
|
||
|
}else{
|
||
|
x.style.display = '';
|
||
|
b.innerHTML='hide';
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
</script>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
|
||
|
<h1 align="center">The Default Page Size Change of SQLite 3.12.0</h1>
|
||
|
|
||
|
<h2>1.0 Introduction</h2>
|
||
|
|
||
|
<p>
|
||
|
An SQLite database file consists of one or more "pages".
|
||
|
For a single database file, all pages are the same size, though
|
||
|
for different database files, the page size can any power of
|
||
|
two between 512 and 65536, inclusive.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Since the SQLite database file format was designed (in 2003) the
|
||
|
default <a href="pragma.html#pragma_page_size">page size</a> for new databases has been 1024 bytes.
|
||
|
This was a reasonable choice in 2003. But on modern hardware,
|
||
|
a 4096 byte page is a faster and better choice.
|
||
|
So, beginning with SQLite <a href="releaselog/3_12_0.html">version 3.12.0</a> (2016-03-29)) the default
|
||
|
page size for new database files has been increased to 4096 bytes.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
The upper bound on the database <a href="pragma.html#pragma_cache_size">cache size</a> has
|
||
|
traditionally defaulted to 2000 pages. SQLite <a href="releaselog/3_12_0.html">version 3.12.0</a> also
|
||
|
changes this default setting to be "-2000" which means 2000*1024
|
||
|
bytes, regardless of page size. So, the upper bound on the amount
|
||
|
of memory used for the page cache is unchanged.
|
||
|
</p>
|
||
|
|
||
|
<h2>2.0 <u>Not</u> a Compatibility Break</h2>
|
||
|
|
||
|
<p>
|
||
|
These changes in the default behavior of SQLite are not
|
||
|
a compatibility break. All legacy database files continue to be
|
||
|
readable and writable by newer versions of SQLite, and all newly
|
||
|
created database files continue to be readable and writable by
|
||
|
legacy versions of the SQLite library. The only thing that is changing
|
||
|
is some default settings. This should result in a performance
|
||
|
increase for many applications.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Though most application should not notice any change (except that
|
||
|
they run a little faster), if problems arise then the
|
||
|
legacy behavior can be restored at compile-time by using the
|
||
|
following options to the C-compiler:
|
||
|
|
||
|
<blockquote><pre>
|
||
|
-DSQLITE_DEFAULT_PAGE_SIZE=1024
|
||
|
-DSQLITE_DEFAULT_CACHE_SIZE=2000
|
||
|
</pre></blockquote>
|
||
|
|
||
|
<p>
|
||
|
The page size and cache size can also be set or changed at run-time using the
|
||
|
<a href="pragma.html#pragma_page_size">page_size pragma</a> and <a href="pragma.html#pragma_cache_size">cache_size pragma</a>, respectively.
|
||
|
|
||
|
<h2>3.0 Possible Negative Consequences Of This Change</h2>
|
||
|
|
||
|
<p>
|
||
|
The minimum size of an SQLite database is one page for each table and
|
||
|
each index. With a larger page size, the size of an empty database
|
||
|
for a given schema will grow by a factor of four, therefore. However,
|
||
|
once the database begins to fill with content the size of the older
|
||
|
1024-byte page databases and the newer 4096-byte page databases will
|
||
|
quickly converge. Due to relaxed bin-packing constraints, the
|
||
|
4096-byte page size might actually result in a smaller file, once
|
||
|
substantial content is added.
|
||
|
</p>
|
||
|
|