Just to confirm that if sqlite3.dll is compiled with
DSQLITE_DEFAULT_PCACHE_INITSZ=0
I can also see memory being released here.
So, that was indeed it.

RBS



On Thu, Jan 7, 2016 at 11:04 PM, Scott Hess <shess at google.com> wrote:

> Hmm.  I see that sqlite3PcacheReleaseMemory() is a no-op
> if sqlite3GlobalConfig.nPage is non-zero, and that happens
> when SQLITE_DEFAULT_PCACHE_INITSZ is not zero.  If I compile with
> -DSQLITE_DEFAULT_PCACHE_INITSZ=0 , then I see the expected pages freed.
> AFAICT, it doesn't matter if you make use of more than
> SQLITE_DEFAULT_PCACHE_INITSZ pages, it still doesn't free the excess.
>
> Looks like that was added in 3.8.11 back in July.
>
> -scott
>
>
> On Thu, Jan 7, 2016 at 5:44 AM, Bart Smissaert <bart.smissaert at gmail.com>
> wrote:
>
> > These are the compile flags of my sqlite3.dll:
> >
> > compile_option
> > ----------------------------------------------------
> > DEBUG
> > ENABLE_COLUMN_METADATA
> > ENABLE_MEMORY_MANAGEMENT
> > MEMDEBUG
> > OMIT_LOOKASIDE
> > THREADSAFE=0
> >
> > And these are the set pragma's:
> >
> > PRAGMA cache_size 32768
> > PRAGMA default_cache_size 32768
> > PRAGMA page_count 712711
> > PRAGMA max_page_count 1073741823
> > PRAGMA page_size 1024
> > PRAGMA journal_size_limit -1
> > PRAGMA locking_mode normal
> > PRAGMA automatic_index 1
> > PRAGMA encoding UTF-8
> > PRAGMA ignore_check_constraints 0
> > PRAGMA read_uncommitted 0
> > PRAGMA recursive_triggers 0
> > PRAGMA reverse_unordered_selects 0
> > PRAGMA secure_delete 0
> > PRAGMA wal_autocheckpoint 1000
> > PRAGMA writable_schema 0
> > PRAGMA journal_mode off
> > PRAGMA auto_vacuum NONE
> > PRAGMA synchronous OFF
> > PRAGMA temp_store DEFAULT
> >
> >
> > RBS
> >
> > On Thu, Jan 7, 2016 at 1:39 PM, Bart Smissaert <bart.smissaert at gmail.com
> >
> > wrote:
> >
> > > > So you should
> > > see results if you start a transaction, do a few update statements,
> > commit
> > > the transaction, the call sqlite3_release_memory(db).
> > >
> > > I tried this with a large table, first with no transaction then with a
> > > transaction
> > > and tried the sqlite3_release_memory directly after the
> sqlite3_finalize,
> > > but in both cases result still zero:
> > >
> > > sqlite3_memory_used: 37190712
> > > sqlite3_release_memory:    0
> > > sqlite3_memory_used: 37190712
> > >
> > > This was a single update, where I don't think a transaction is helpful.
> > > Still no idea how I can make sqlite3_release_memory produce non-zero.
> > >
> > > RBS
> > >
> > >
> > >
> > > On Thu, Jan 7, 2016 at 6:05 AM, Scott Hess <shess at google.com> wrote:
> > >
> > >> On Wed, Jan 6, 2016 at 3:03 PM, Bart Smissaert <
> > bart.smissaert at gmail.com>
> > >> wrote:
> > >>
> > >> > Have compiled sqlite3.dll (latest) compiled with
> > >> ENABLE_MEMORY_MANAGEMENT,
> > >> > but sofar
> > >> > not been able yet to make sqlite3_release_memory produce anything
> else
> > >> than
> > >> > 0.
> > >> > What would be the simplest way to make this happen?
> > >> > I don't want to do this with C coding, so it should be some SQL
> > >> scenario or
> > >> > to do with simple
> > >> > SQLite functions such as sqlite3_step, _prepare, -finalize etc.
> > >>
> > >>
> > >> Last time I was paying attention to this, I believe that I found that
> > the
> > >> biggest effect was to free unpinned pages from the page cache.  So it
> > >> might
> > >> not free pages if you're in a transaction, for instance.  I would
> guess
> > >> that if you had memory-mapped mode on and are doing only reads, there
> > >> would
> > >> be no pages to free (mmap pages aren't in the page cache).  So you
> > should
> > >> see results if you start a transaction, do a few update statements,
> > commit
> > >> the transaction, the call sqlite3_release_memory(db).
> > >>
> > >> -scott
> > >> _______________________________________________
> > >> sqlite-users mailing list
> > >> sqlite-users at mailinglists.sqlite.org
> > >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> > >>
> > >
> > >
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users at mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> >
> _______________________________________________
> sqlite-users mailing list
> sqlite-users at mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>

Reply via email to