sqlite3_int64 leaf_unused; /* unused bytes on leaf pages */
sqlite3_int64 int_unused; /* unused bytes on internal pages */
sqlite3_int64 ovfl_unused; /* unused bytes on overflow pages */
+ sqlite3_int64 int_cell; /* B-tree entries on internal pages */
sqlite3_int64 depth; /* btree depth */
sqlite3_int64 cnt; /* Number of s.zSU entries that match */
sqlite3_int64 storage; /* Total bytes */
" sum(int_unused),\n" /* 9 */
" sum(ovfl_unused),\n" /* 10 */
" max(depth),\n" /* 11 */
- " count(*)\n" /* 12 */
+ " count(*),\n" /* 12 */
+ " sum(int_entries)\n" /* 13 */
" FROM temp.%s WHERE %s",
p->zSU, zWhere);
if( pStmt==0 ) return 1;
ovfl_unused = sqlite3_column_int64(pStmt, 10);
depth = sqlite3_column_int64(pStmt, 11);
cnt = sqlite3_column_int64(pStmt, 12);
+ int_cell = sqlite3_column_int64(pStmt, 13);
rc = SQLITE_DONE;
total_pages = leaf_pages + int_pages + ovfl_pages;
analysisPercent(p, total_meta*100.0/(double)storage);
if( cnt==1 ){
analysisLine(p, "B-tree depth", "%lld\n", depth);
+ if( int_cell>1 ){
+ analysisLine(p, "Average fanout", "%.1f\n",
+ (double)(int_cell+1)/(double)int_pages);
+ }
}
if( nentry>0 ){
analysisLine(p, "Average payload per entry", "%.1f\n",
" ovfl_pages int, -- Overflow pages used\n"
" int_unused int, -- Unused bytes on interior pages\n"
" leaf_unused int, -- Unused bytes on primary pages\n"
- " ovfl_unused int -- Unused bytes on overflow pages\n"
+ " ovfl_unused int, -- Unused bytes on overflow pages\n"
+ " int_entries int -- Btree cells on internal pages\n"
");",
s.zSU
);
" sum(pagetype='overflow'),\n"
" sum((pagetype='internal')*unused),\n"
" sum((pagetype='leaf')*unused),\n"
- " sum((pagetype='overflow')*unused)\n"
+ " sum((pagetype='overflow')*unused),\n"
+ " sum(if(pagetype='internal',ncell))\n"
" FROM allobj CROSS JOIN dbstat(%Q) \n"
" WHERE dbstat.name=allobj.allname\n"
" GROUP BY allname;\n",
" ovfl_pages int, -- Overflow pages used\n" /* 13 */
" int_unused int, -- Unused bytes on interior pages\n" /* 14 */
" leaf_unused int, -- Unused bytes on primary pages\n" /* 15 */
- " ovfl_unused int -- Unused bytes on overflow pages\n" /* 16 */
+ " ovfl_unused int, -- Unused bytes on overflow pages\n" /* 16 */
+ " int_entries int -- B-tree entries on internal pages\n"/* 17 */
");\n"
"INSERT INTO space_used VALUES\n"
);
" is_index, is_without_rowid, nentry, leaf_entries,\n" /* 2..5 */
" depth, payload, ovfl_payload, ovfl_cnt, mx_payload,\n" /* 6..10 */
" int_pages, leaf_pages, ovfl_pages, int_unused,\n" /* 11..14 */
- " leaf_unused, ovfl_unused\n" /* 15..16 */
+ " leaf_unused, ovfl_unused, int_entries\n" /* 15..17 */
" FROM temp.%s;",
s.zSU);
if( pStmt==0 ) return;
if( n++ ) sqlite3_str_appendf(s.pOut,",\n");
sqlite3_str_appendf(s.pOut,
" (%s,%s,%lld,%lld,%lld,%lld,%lld,%lld,%lld,"
- "%lld,%lld,%lld,%lld,%lld,%lld,%lld,%lld)",
+ "%lld,%lld,%lld,%lld,%lld,%lld,%lld,%lld,%lld)",
sqlite3_column_text(pStmt, 0),
sqlite3_column_text(pStmt, 1),
sqlite3_column_int64(pStmt, 2),
sqlite3_column_int64(pStmt, 13),
sqlite3_column_int64(pStmt, 14),
sqlite3_column_int64(pStmt, 15),
- sqlite3_column_int64(pStmt, 16));
+ sqlite3_column_int64(pStmt, 16),
+ sqlite3_column_int64(pStmt, 17));
}
if( rc!=SQLITE_DONE ){
analysisError(&s, "SQL run-time error: %s\nSQL: %s",
-C Code\ssimplifications.\s\sReturn\sNULL\sis\sthe\sspecified\sSCHEMA\sdoes\snot\sexist.
-D 2026-04-14T23:19:02.848
+C Compute\sthe\saverage\sfanout\sfor\sb-trees\sof\sdepth\s2\sor\smore.
+D 2026-04-15T10:49:14.796
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/jni/src/tests/900-001-fts.test bf0ce17a8d082773450e91f2388f5bbb2dfa316d0b676c313c637a91198090f0
F ext/misc/README.md 6243cdc4d7eb791c41ef0716f3980b8b5f6aa8c61ff76a3958cbf0031c6ebfa7
F ext/misc/amatch.c 8d237cc014b3736922c26a76a451050d244aa4980c47c531f368f817b1e77b49
-F ext/misc/analyze.c 43e774e832e3e67ff3871a169272f03722a18671d4363bfd2f72d32cfce53820
+F ext/misc/analyze.c b4796025ba05b31d55150b735aaffcf1f1138ed112243b3d18884a31d049a7d1
F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb
F ext/misc/appendvfs.c 9642c7a194a2a25dca7ad3e36af24a0a46d7702168c4ad7e59c9f9b0e16a3824
F ext/misc/base64.c 1445761667c16356e827fc6418294c869468be934429aaa8315035e76dd58acf
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P bb4a9beac87796b4186efce416bf03f840041bc588be6702c5a444d643df684e
-R e7f6835daaccdf5e7b6289dc60f181f3
+P 953969c88149ea2f589942b98a0a96d907956319e5aa09e2d5a3ae76d3e7d70a
+R 5d654c3affeea1d5147e00173ff491e0
U drh
-Z c5df2a2668c00250df8de94d1161fa38
+Z a1e7f4cc02c6ed8230a8c2c2df43d5f3
# Remove this line to create a well-formed Fossil manifest.