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 >