On Sun, Nov 30, 2014 at 11:06 PM, Александр Гурьянов <caiiiy...@gmail.com>
wrote:

> Hi. Hi. I am writing an app that stores some blobs in sqlite3 database. My
> question is about disk space usage.
> For analyst i use sqlite_analyzer.
>
> My database is created with this script:
>
> PRAGMA page_size = 512;
> PRAGMA synchronous = OFF;
> PRAGMA journal_mode = MEMORY;
> begin;
> create table grid_blobs(grid_id integer, blob blob, PRIMARY KEY(grid_id))
> WITHOUT ROWID;
>

You'll have much better success here if you omit the WITHOUT ROWID.  See
section 4.0 "When to use WITHOUT ROWID" at
https://www.sqlite.org/withoutrowid.html for additional information.

See also:   http://www.sqlite.org/affcase1.html#smaller




> insert into grid_blobs values(0, randomblob(70));
> insert into grid_blobs values(1, randomblob(66));
> insert into grid_blobs values(2, randomblob(82));
> insert into grid_blobs values(3, randomblob(79));
> insert into grid_blobs values(4, randomblob(67));
> insert into grid_blobs values(5, randomblob(124));
> insert into grid_blobs values(6, randomblob(119));
> insert into grid_blobs values(7, randomblob(70));
> insert into grid_blobs values(8, randomblob(82));
> insert into grid_blobs values(9, randomblob(75));
> --... (other entries)
> insert into grid_blobs values(2703, randomblob(698));
> commit;
>
> There are 2703 entries with blob length from 31 bytes up to 49870 bytes
> (avg: 2297, median: 332).
> The output of sqlite_analyzer for this table is:
>
> sqlite3 test.db "PRAGMA page_size=512; vacuum;" &&
> ~/Downloads/sqlite3_analyzer test.db > analyze
> Percentage of total database......................  99.984%
> Number of entries................................. 2437
> Bytes of storage consumed......................... 3229184
> Bytes of payload.................................. 2608484     80.8%
> Average payload per entry......................... 1070.37
> Average unused bytes per entry.................... 235.34
> Average fanout.................................... 8.00
> Non-sequential pages.............................. 0            0.0%
> Maximum payload per entry......................... 49877
> Entries that use overflow......................... 2321        95.2%
> Index pages used.................................. 35
> Primary pages used................................ 268
> Overflow pages used............................... 6004
> Total pages used.................................. 6307
> Unused bytes on index pages....................... 1774         9.9%
> Unused bytes on primary pages..................... 8836         6.4%
> Unused bytes on overflow pages.................... 562916      18.3%
> Unused bytes on all pages......................... 573526      17.8%
>
> sqlite3 test.db "PRAGMA page_size=1024; vacuum;" &&
> ~/Downloads/sqlite3_analyzer test.db > analyze
> Unused bytes on index pages....................... 4679        10.6%
> Unused bytes on primary pages..................... 17233        5.7%
> Unused bytes on overflow pages.................... 933114      28.7%
> Unused bytes on all pages......................... 955026      26.5%
>
> sqlite3 test.db "PRAGMA page_size=2048; vacuum;" &&
> ~/Downloads/sqlite3_analyzer test.db > analyze
> Unused bytes on index pages....................... 13738       14.6%
> Unused bytes on primary pages..................... 37882        6.6%
> Unused bytes on overflow pages.................... 1184110     37.0%
> Unused bytes on all pages......................... 1235730     31.9%
>
> sqlite3 test.db "PRAGMA page_size=4096; vacuum;" &&
> ~/Downloads/sqlite3_analyzer test.db > analyze
> Unused bytes on index pages....................... 16017       12.6%
> Unused bytes on primary pages..................... 57645        6.3%
> Unused bytes on overflow pages.................... 1264444     43.2%
> Unused bytes on all pages......................... 1338106     33.7%
>
> sqlite3 test.db "PRAGMA page_size=8192; vacuum;" &&
> ~/Downloads/sqlite3_analyzer test.db > analyze
> Unused bytes on index pages....................... 31248       18.2%
> Unused bytes on primary pages..................... 70063        5.5%
> Unused bytes on overflow pages.................... 1535111     54.6%
> Unused bytes on all pages......................... 1636422     38.4%
>
> sqlite3 test.db "PRAGMA page_size=16384; vacuum;" &&
> ~/Downloads/sqlite3_analyzer test.db > analyze
> Unused bytes on index pages....................... 52549       24.7%
> Unused bytes on primary pages..................... 88974        5.1%
> Unused bytes on overflow pages.................... 1202291     59.7%
> Unused bytes on all pages......................... 1343814     33.9%
>
> sqlite3 test.db "PRAGMA page_size=32768; vacuum;" &&
> ~/Downloads/sqlite3_analyzer test.db > analyze
> Unused bytes on index pages....................... 36957       18.8%
> Unused bytes on primary pages..................... 104610       5.0%
> Unused bytes on overflow pages.................... 1104895     70.2%
> Unused bytes on all pages......................... 1246462     32.2%
>
> sqlite3 test.db "PRAGMA page_size=65536; vacuum;" &&
> ~/Downloads/sqlite3_analyzer test.db > analyze
> Unused bytes on index pages....................... 115861      44.2%
> Unused bytes on primary pages..................... 179123       7.2%
> Unused bytes on overflow pages.................... 427834      72.5%
> Unused bytes on all pages......................... 722818      21.6%
>
> As you can see there are initially 18% of unused space in overflow pages.
> As far as I understand it means that there are
> some blobs that do not fit into primary pages and these blobs are stored in
> overflow pages. But with increasing page size the unused space on overflow
> pages are also growth. Even when the page size is greater then max blob
> size (page_size = 65536, max blob = 49870) there are 72.5% of unused bytes
> on overflow pages. Why?
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
>


-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to