On Mon, Jul 30, 2018 at 10:11 AM Eric Grange <egra...@glscene.org> wrote:

> @David Yip
> > If you have the dbstat module enabled (-DSQLITE_ENABLE_DBSTAT_VTAB), you
> > can query the dbstat virtual table for the number of pages used per
> table and index, e.g.
>
> Thanks, I did not know about that module, however it is a bit slow, on a 7
> GB database I have, it takes almost 5 minutes, and I have larger databases
> :/
> So it's definitely something that would have to run in the background or
> night.
>

Well, you probably already know that in SQLite, there's a 100 bytes header,
then N fixed-sized pages,
where the page size is configurable from 512 bytes to 64KB by powers of 2.
The first page contains
the sqlite_master table, which references the "root" page of each table and
index. But that's it. To know
how many pages each table/index uses, SQLite (or any other tool) will need
to read each object's root page,
and traverse the b-tree of pages rooted at that first page (and their
overflow pages). Then repeat for each object.
Thus in most cases, all pages of the DB will need to be "paged", i.e. read,
so that's a lot of IO, so not quite fast.

If your DB has auto or incremental vacuum configured, you've have special
PtrMap pages.


@D Burgess
> > download sqlite3_analyzer
>
> Thanks, the text output is interesting with built-in documentation.


If I recall correctly, sqlite3_analyzer's output is based on the dbstat
vtable, so it's unlikely to be faster I assume. --DD
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to