Probably want one item per database for cache, one per database/connection for prepared statements, similarly for in-memory tables.
In order to do this, we'll need some new APIs (or an expansion of existing APIs) from SQLite. What I think we'd need:
1) Given a sqlite3*, how much memory is used for the page cache
2) Given a sqlite3*, how much memory is used for currently compiled statements
This might go best on sqlite3_db_status.
Will that cover in-memory tables, like the ones that are currently used for places temp tables?
(In reply to comment #2)
> Will that cover in-memory tables, like the ones that are currently used for
> places temp tables?
I would think so, but that's something we can make sure gets covered too.
You can get some extra global memory usage information
from sqlite3_status(). Specifically, if you look at the return from
sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW,...) then (assuming that you
have *not* configured a separate chunk of memory designated specifically for
page cache, which presumably you have not) all page cache memory allocations
will be overflow allocations and so the result will show the current and the
peak amount of memory SQLite is using for page cache across all database
connections. If you then subtract that amount from the total memory used,
you will get a reasonable estimate of the total memory used for compiled
statements. Well, compiled statements + parsed schema storage + whatever
memory is being used but currently running queries. That' isn't perfect,
but you could at least split the current about:memory line for sqlite into
two lines - one for sqlite.pagecache and another for sqlite.other. I think
that would be a useful addition to about:memory and it doesn't require any
So, going to do that here, and when we get the new API, I'll open up a new bug.
Created attachment 458994 [details] [diff] [review]
Threw this together while I was waiting for my plane yesterday.