小。速度很快。可靠。
选择任意三个选项。
DBSTAT虚拟表

1概述

DBSTAT虚拟表是只读的同名虚拟表那就回来了有关用于存储内容的磁盘空间量的信息SQLite数据库的。示例用例DBSTAT虚拟表包括sqlite3_analyzer.exe实用程序和桌子大小的馅饼在里面这个化石-补充版本控制系统用于SQLite。

DBSTAT虚拟表在所有数据库连接当使用数据库启用数据库选项卡compile-time选项。

DBSTAT虚拟表是一个同名虚拟表,表示不需要运行创建虚拟表格创建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,--“内部”、“叶”、“溢出”或NULLncell 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的利用率。

2dbstat虚拟表的“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使用的总存储空间。

4dbstat虚拟表的示例用法

要查找用于在模式“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联合技术公司