mozilla

Compare Revisions

Performance

Change Revisions

Revision 60946:

Revision 60946 by MarcDiethelm on

Revision 60947:

Revision 60947 by Sipaq on

Title:
Performance
Performance
Slug:
Storage/Performance
Storage/Performance
Tags:
Storage, "Toolkit API"
Storage, "Toolkit API"
Content:

Revision 60946
Revision 60947
n8      <a href="en/Storage">mozStorage</a> uses {{mediawiki.interwn8      <a href="en/Storage">mozStorage</a> uses {{ mediawiki.inter
>iki('wikipedia', 'SQLite', 'SQLite')}} as the database backend. I>wiki('wikipedia', 'SQLite', 'SQLite') }} as the database backend.
>t has generally good performance for a small embedded database. H> It has generally good performance for a small embedded database.
>owever, many things cause various database operations to be slow.> However, many things cause various database operations to be slo
 >w.
n50      You can download the command line tool from the <a class="en50      You can download the command line tool from the <a class="e
>xternal" href="http://www.sqlite.org/download.html">sqlite downlo>xternal" href="http://www.sqlite.org/download.html">sqlite downlo
>ad page</a>. Be sure you have a version of the command line tool >ad page</a>. Be sure you have a version of the command line tool 
>that is at least as recent as what Mozilla uses. As of April 10, >that is at least as recent as what Mozilla uses. As of April 10, 
>2006, Mozilla uses sqlite 3.3.4, but the latest precompiled versi>2006, Mozilla uses sqlite 3.3.4, but the latest precompiled versi
>on of the command line tools is not available for all platforms. >on of the command line tools is not available for all platforms. 
>This will lead to errors that say "database is encrypted" because>This will lead to errors that say "database is encrypted" because
> the tool is not able to recognize the file format. You may want > the tool is not able to recognize the file format. You may want 
>to check the SQLITE_VERSION definition in {{template.Source("db/s>to check the SQLITE_VERSION definition in {{ Source("db/sqlite3/s
>qlite3/src/sqlite3.h")}} for the current version if you are havin>rc/sqlite3.h") }} for the current version if you are having probl
>g problems.>ems.
n62      You can control the size of the memory cache using the <codn62      You can control the size of the memory cache using the <cod
>e>cache_size</code> <a class="external" href="http://www.sqlite.o>e>cache_size</code> <a class="external" href="http://www.sqlite.o
>rg/pragma.html">pragma</a>. This value controls the number of pag>rg/pragma.html">pragma</a>. This value controls the number of pag
>es of the file that can be kept in memory at once. The page size >es of the file that can be kept in memory at once. The page size 
>can be set using the <code>page_size</code> pragma before any ope>can be set using the <code>page_size</code> pragma before any ope
>rations have been done on the file. You can see an example of set>rations have been done on the file. You can see an example of set
>ting the maximum cache size to be a percentage of memory in nsNav>ting the maximum cache size to be a percentage of memory in nsNav
>History::InitDB in {{template.Source("browser/components/places/s>History::InitDB in {{ Source("toolkit/components/places/src/nsNav
>rc/nsNavHistory.cpp")}}.>History.cpp") }}.
n111      The problem is that these requirements make some operationsn111      The problem is that these requirements make some operations
>, especially commits, very slow. For each commit, sqlite does two>, especially commits, very slow. For each commit, sqlite does two
> disk syncs among many other file operations (see the "Atomic Com> disk syncs among many other file operations (see the "Atomic Com
>mit" section of http://www.sqlite.org/php2004/slides-all.html for>mit" section of <a class=" external" href="http://www.sqlite.org/
> more information on how this works). These disk syncs are very s>php2004/slides-all.html" rel="freelink">http://www.sqlite.org/php
>low and limit the speed of a commit to the rotational speed of th>2004/slides-all.html</a> for more information on how this works).
>e mechanical disk.> These disk syncs are very slow and limit the speed of a commit t
 >o the rotational speed of the mechanical disk.
n123      Higher commit performance is achieved by writing to the datn123      Higher commit performance is achieved by writing to the dat
>abase from a separate thread (see {{template.Source("storage/src/>abase from a separate thread (see {{ Source("storage/src/mozStora
>mozStorageAsyncIO.cpp")}} which is associated with the storage se>geAsyncIO.cpp") }} which is associated with the storage service i
>rvice in {{template.Source("storage/src/mozStorageService.cpp")}}>n {{ Source("storage/src/mozStorageService.cpp") }}). The main da
>). The main database thread does everything exactly as it did bef>tabase thread does everything exactly as it did before. However, 
>ore. However, we have overridden the file operations and everythi>we have overridden the file operations and everything comes throu
>ng comes through the AsnycIO module. This file is based on <a cla>gh the AsnycIO module. This file is based on <a class="external" 
>ss="external" href="http://www.sqlite.org/cvstrac/rlog?f=sqlite/s>href="http://www.sqlite.org/cvstrac/rlog?f=sqlite/src/test_async.
>rc/test_async.c">test_async.c</a> from the sqlite distribution.>c">test_async.c</a> from the sqlite distribution.
n150      Some items in databases are privacy sensitive, such as delen150      Some items in databases are privacy sensitive, such as dele
>ted history items. Users have the expectation that deleting items>ted history items. Users have the expectation that deleting items
> in their history will remove the traces of that from the databas> in their history will remove the traces of that from the databas
>e. As a result, Mozilla enables the <code>SQLITE_SECURE_DELETE</c>e. As a result, Mozilla enables the <code>SQLITE_SECURE_DELETE</c
>ode> preprocessor flag in {{template.Source("db/sqlite3/src/Makef>ode> preprocessor flag in {{ Source("db/sqlite3/src/Makefile.in")
>ile.in")}}. This flag causes deleted items to be filled with 0s o> }}. This flag causes deleted items to be filled with 0s on disk.
>n disk. This eliminates the need to vacuum except to reclaim disk> This eliminates the need to vacuum except to reclaim disk space,
> space, and makes many operations much faster.> and makes many operations much faster.
n153      Zero-filling can have significant performance overhead in sn153      Zero-filling can have significant performance overhead in s
>ome situations. For example, the history service used to delete m>ome situations. For example, the history service used to delete m
>any database items at shutdown when expiring old history items. T>any database items at shutdown when expiring old history items. T
>his operation is not necessarily slow, but writing 0s to disk in >his operation is not necessarily slow, but writing 0s to disk in 
>an "ACI" database is still slow. This made shutdown very slow bec>an "ACI" database is still slow. This made shutdown very slow bec
>ause the AsyncIO thread would block shutdown ({{template.Bug(3285>ause the AsyncIO thread would block shutdown ({{ Bug("328598") }}
>98)}}). Shutdown times of more than 30 seconds were seen. As a re>). Shutdown times of more than 30 seconds were seen. As a result,
>sult, this bug introduced incremental history expiration eliminat> this bug introduced incremental history expiration eliminating t
>ing the need to write many 0s to disk on shutdown.>he need to write many 0s to disk on shutdown.
t157    </p>{{ wiki.languages( { "pl": "pl/Storage/Wydajno\u015b\u010t157    </p>{{ languages( { "pl": "pl/Storage/Wydajno\u015b\u0107" } 
>7" } ) }}>) }}

Back to History