On Mon, Feb 07, 2011 at 05:18:57PM +0100, Stefan Sperling wrote:
> On Mon, Feb 07, 2011 at 10:55:47AM -0500, Mark Phippard wrote:
> > On Mon, Feb 7, 2011 at 10:52 AM, Stefan Sperling <s...@elego.de> wrote:
> > 
> > > Where is the temporary table stored? Is it back by a file or memory?
> > > If backed by memory, do we have to worry about memory consumption for
> > > large working copies?
> > 
> > The patch says it is backed by a file.
> 
> Yes, it does say that in a comment but I didn't see where this is being
> enforced in the code.
> Checking the sqlite docs gave the answer:
> 
>   "When the name of the database file handed to sqlite3_open() or to ATTACH
>    is an empty string, then a new temporary file is created to hold the
>    database."
> http://sqlite.org/inmemorydb.html
> 
> This is what the patch does:
> 
> +-- STMT_ATTACH_TEMPORARY_DATABASE
> +ATTACH DATABASE '' AS temp_query_cache;
> 
> And note that the sqlite docs also say:
> 
>   "Even though a disk file is allocated for each temporary database, in
>    practice the temporary database usually resides in the in-memory pager
>    cache and hence is very little difference between a pure in-memory
>    database created by ":memory:" and a temporary database created by an
>    empty filename. The sole difference is that a ":memory:" database must
>    remain in memory at all times whereas parts of a temporary database
>    might be flushed to disk if database becomes large or if SQLite comes
>    under memory pressure."
> 
> Neat :)

Actually, we are forcing all temporary databases to be pure memory
in svn_sqlite__open():

  /* Store temporary tables in RAM instead of in temporary files, but don't
     fail on this if this option is disabled in the sqlite compilation by
     setting SQLITE_TEMP_STORE to 0 (always to disk) */
  svn_error_clear(exec_sql(*db, "PRAGMA temp_store = MEMORY;"));

Is this really a good idea? I think we should set it to FILE by default.
http://sqlite.org/pragma.html#pragma_temp_store

Reply via email to