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.
From drh: 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 SQLite changes. 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] v1.0 Threw this together while I was waiting for my plane yesterday.