MyRocks_zh_doc

MyRocks 优化器统计信息

每个sst文件都包含属于多个SQL索引的数据。要计算优化程序统计信息, 我们按索引存储以下信息,每个sst文件:

* 行数
* 磁盘上索引的大小(即压缩)
* 原始数据大小
* index cardinality 索引基数(即每个前缀大小的多个不同键)

由于SST文件是不可变的,因此该数据计算一次,存储在文件中,永远不会再次更改。由于单个索引在多个sst文件之间拆分, 因此MyRocks会合并所有文件的每个索引的统计信息,以提供全局索引统计信息。 即,每个保存文件时,其统计信息都会添加到全局每个索引统计信息中。每次删除文件时,都会从每个索引信息中扣除其统计信息。 可以通过analyze table语句为表中的所有索引重新创建统计信息。

为了近似两个密钥之间的记录数量,MyRocks获得这两个密钥之间的近似数据大小,然后将该值除以该表的平均记录大小, 已得到该密钥范围的近似记录计数。

对于位于memtable中且尚未刷新到磁盘的索引,将实现特殊逻辑。每个记录近似为100个字节。以从memtable中获取大小数据中的行数。

从不同的文件添加相同索引的统计数据是一个很好的近似值,但它有一些问题。多个sst文件可能包含相同密钥的不同值。 其中一些值可能是删除标记(及墓碑)。例如,在大量删除后,LSM树可能包含每个键的值和逻辑删除。

还有表 infomation_schema.rocksdb_index_file_map,其中包含于驻留在SST文件中的记录的大小和数量有关的信息。