1 概述
DBSTAT虚拟表是只读的 同名虚拟表 那就回来了 有关用于存储内容的磁盘空间量的信息 SQLite数据库的。 示例用例 DBSTAT虚拟表包括 sqlite3_analyzer.exe 实用程序和 桌子大小的馅饼 在里面 这个 化石-补充 版本控制系统 用于SQLite。
DBSTAT虚拟表在所有 数据库连接 当使用 数据库启用数据库选项卡 compile-time选项。
DBSTAT虚拟表是一个 同名虚拟表 ,表示 不需要运行 创建虚拟表格 创建 dbstat虚拟表的实例。“dbstat” 模块名可以用作查询 直接使用dbstat虚拟表。 例如:
如果需要使用dbstat模块的命名虚拟表, 然后是创建dbstat实例的推荐方法 虚拟表如下所示:
使用dbstat(main)创建虚拟表temp.stat;
注意虚拟表名称(“stat”)之前的“temp.”限定符。 这个 限定符导致虚拟表是临时的-只存在于 当前数据库连接的持续时间。 这是 推荐的方法。
dbstat的“main”参数是默认模式 需要提供的信息。 默认值为“main”,并且 所以在上面的例子中使用“main”是多余的。 对于任何 特定查询,可以通过指定 替代模式作为虚拟表的函数参数 查询的FROM子句中的name。 (参见进一步讨论 FROM子句中的表值函数 了解更多详细信息。)
DBSTAT虚拟表的模式如下所示:
创建表dbstat( name TEXT,--表或索引的名称 path TEXT,--从根到页面的路径 pageno INTEGER,--页码或页数 页面类型TEXT,--“内部”、“叶”、“溢出”或NULL ncell INTEGER,--页上的单元格(溢出页为0) payload INTEGER,--此页或btree上的有效负载字节 未使用的整数,--此页或btree上未使用空间的字节 mx_payload INTEGER,--此行所有单元格的最大有效负载大小 pgoffset INTEGER,--数据库文件中页的字节偏移量 pgsize整数,--页面大小(字节) 模式TEXT HIDDEN,--正在分析的数据库模式 聚合BOOL HIDDEN—为True以启用聚合模式 );
DBSTAT表只报告数据库文件中btree的内容。 自由列表页、指针映射页和锁定页从 分析。
默认情况下,DBSTAT表中的每一行 btree对数据库文件进行分页。 每行提供 有关该页面的空间利用率的信息 数据库。 但是,如果隐藏列“聚合”为TRUE,则 结果被聚合,DBSTAT表中只有一行 对于数据库中的每个btree,提供有关空间的信息 整个btree的利用率。
2 dbstat虚拟表的“path”列
“路径”列描述从 每个页面的btree结构的根节点。 这个 根节点本身的“路径”是“/”。 当“聚合”为TRUE时,“路径”为NULL。 根目录最左侧子页的“路径” b树页面是“/000/”。 (Btrees按从左到右的顺序存储内容 因此,左侧页面的键比右侧页面的键小。) 根页面最左侧的下一个子级是“/001”,依此类推, 每个同级页由一个3位十六进制值标识。 第451个最左翼兄弟姐妹的孩子有这样的路径 如“/1c2/000/,”/1c2/001/“等。 溢出页是通过附加“+”字符和 链接到单元格的路径的六位十六进制值 来自。 例如,链接自 确定了根页面第450个子级的最左侧单元格 按路径:
“/1c2/000+0000000”//溢出链中的第一页 “/1c2/000+000001”//溢出链中的第二页 “/1c2/000+000002”//溢出链中的第三页
如果使用BINARY排序规则序列对路径进行排序,则 与单元格关联的溢出页将出现在 排序顺序,而不是其子页面:
“/1c2/000/”//根的第451个子级的最左子级
三。 聚合数据
从SQLite版本3.31.0(2020-01-22)开始,DBSTAT表 有一个新的 隐藏的列 命名为“聚合”,如果约束为 TRUE将导致DBSTAT在数据库中为每个btree生成一行, 而不是每页一行。 在聚合模式下运行时 “path”、“pagetype”和“pgoffset”列始终为NULL,并且 “pageno”列保存整个btree中的页数,而不是 与行对应的页数相比。
下表显示了的(非隐藏)列的含义 正常和聚合模式下的DBSTAT:
列 正常意义 聚合模式含义
名称 由实现的表或索引的名称 当前行的btree
路径 请参见 上述描述
始终为NULL
页码 当前行的数据库页的页码 当前行的btree中的总页数
纸张类型 “叶”或“内部” 始终为NULL
ncell公司 当前页或btree上的单元格数
有效载荷 当前页或btree上有用负载的字节数
未使用的 当前页或btree上未使用的字节
mx有效载荷 当前页面中任何位置的最大有效载荷 或btree。
pg偏移 到页面开头的字节偏移量 始终为NULL
页面大小 当前页或btree使用的总存储空间。
4 dbstat虚拟表的示例用法
要查找用于在模式“aux1”中存储表“xyz”的总页数, 使用以下两个查询之一(第一个是传统方式, 并且第二个示出了聚合特征的使用):
SELECT count(*)FROM dbstat('aux1')WHERE name='xyz'; SELECT pageno FROM dbstat('aux1',1)WHERE name='xyz';
要查看表内容在磁盘上的存储效率, 计算用于保存被分割的实际内容的空间量 按使用的磁盘空间总量计算。 这个数字越接近 100%,包装效率越高。 (在本例中 假定“xyz”表位于“main”架构中。 再说一遍,在那里 有两个不同的版本显示了DBSTAT的使用,但都没有 以及新的聚合功能。)
从dbstat WHERE name='xyz'选择sum(pgsize-unused)*100.0/sum(pgsize); 从dbstat中选择(pgsize-unused)*100.0/pgsize 其中名称=“xyz”且聚合=真;
要查找表的平均扇出,请运行:
从dbstat中选择avg(ncell)WHERE name='xyz'AND pagetype='internal';
当磁盘访问是连续的时,现代文件系统的运行速度更快。 因此,如果数据库文件的内容 位于连续页面上。 要找出页面的哪一部分 数据库是连续的(因此可以获得可能 有助于确定何时 真空 ),运行如下查询:
创建温度表(rowid整数主键,pageno INT); INSERT INTO s(pageno)SELECT pageno FROM dbstat ORDER BY path; 选择总和(s1.pageno+1==s2.pageno)*1.0/count(*) 从s到s1,从s到s2 其中s1.rowid+1=s2.rowid; 下拉表;
此页面上次修改时间 2022-01-08 05:02:57 联合技术公司