为什么会出现APPROXIMATE_KEYS为0,APPROXIMATE_SIZE却有几兆到上百兆大

  • 【TiDB 版本】:V3.0.5
  • 【问题描述】:查询系统信息表TIKV_REGION_STATUS,发现keys为0,但是region的size特别大

我理解的是keys为0的应该size也为0,或者很小比如1兆 2兆,这些就是作为empty-region存在。
为什么查询系统统计信息会出现这种落差?



由于 approximate_size 和 approximate_keys 是估算值,确实有可能存在误差

目前统计 region size,delete entries 没有计算在内(https://github.com/tikv/tikv/issues/6161) ,也可能导致 size 结果不准;可以确认这些 region 所属的表或索引,以及表上做过什么操作

尝试调整 region merge 阈值,调小 max-merge-region-keys 调大 max-merge-region-size,等 region merge 后再查看 region 统计信息

比如 : max-merge-region-keys 0 max-merge-region-size 100

这样来合并这些统计不准确的?

另外这两个merge的配置是或还是和?

设置为 0 是关闭 merge,可以设置 max-merge-region-keys 10 和 max-merge-region-size 150

这两个配置是和的关系,即同时满足条件的 region 才能 merge

3.0.5 版本默认同一个表内的 region 才可以 merge,开启跨表 region merge 需要设置参数

TiKV: split-region-on-table 设为 false,该参数修改后需要重启 TiKV 生效
PD: namespace-classifier 设为 default ,该参数修改后需要重启 PD 生效

还可以尝试手动 merge region,如

operator add merge-region 1 2                        // 将 Region 1 与 Region 2 合并