mozilla

Compare Revisions

Performance

Change Revisions

Revision 60918:

Revision 60918 by BrettWilson on

Revision 60919:

Revision 60919 by BrettWilson on

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

Revision 60918
Revision 60919
n35      <br>n35      You can control the size of the memory cache using the <cod
 >e>cache_size</code> <a class="external" href="http://www.sqlite.o
 >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 
 >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
 >ting the maximum cache size to be a percentage of memory in nsNav
 >History::InitDB in {{template.Source("browser/components/places/s
 >rc/nsNavHistory.cpp")}}.
36    </p>
37    <h3 name="Keeping_the_cache_between_transactions">
38      Keeping the cache between transactions
39    </h3>
40    <p>
41      If your application uses many small transactons, you can ge
 >t a significant performance improvement by keeping the cache live
 > between transactions. This is done with another (dummy) connecti
 >on to the same database with a special flag set to cause the cach
 >es to be shared between the two connections. The dummy connection
 > keeps a perpetually open transaction which locks the cache in me
 >mory. Since the cache is shared with the main connection, the cac
 >he never expires.
n38      <br>n44      The dummy transaction must be one that locks a page in memo
 >ry. A simple <code>BEGIN TRANSACTION</code> statement doesn't do 
 >this because sqlite does the locking lazily. Therefore, you must 
 >have a statement that modifies data. It might be tempting to run 
 >a statement on the <code>sqlite_master</code> which contains the 
 >information on the tables and indices in the database. However, i
 >f your application is initializing the database the first time, t
 >his table will be empty and the cache won't be locked. nsNavHisto
 >ry::StartDummyStatement creates a dummy table with a single eleme
 >nt in it for this purpose.
n41      You can control the size of the memory cache using the <codn47      It is important to note that when a statement is open, the 
>e>cache_size</code> <a class="external" href="http://www.sqlite.o>database schema can not be modified. This means that when the dum
>rg/pragma.html">pragma</a>. This value controls the number of pag>my transaction is running, you can not create or modify any table
>es of the file that can be kept in memory at once. The page size >s or indices, or vacuum the database. You will have to stop the d
>can be set using the <code>page_size</code> pragma before any ope>ummy transaction, do the schema-modifying operation, and re-start
>rations have been done on the file. You can see an example of set> it.
>ting the maximum cache size to be a percentage of memory in nsNav 
>History::InitDB in {{template.Source("browser/components/places/s 
>rc/nsNavHistory.cpp")}}. 
tt49    <h3 name="Priming_the_cache">
50      Priming the cache
51    </h3>

Back to History