为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:v3.06
- 【问题描述】:每天晚上定时执行完 ANALYZE TABLE tab1 后就走错索引,然后对索引执行 ANALYZE TABLE tab1 index index_tab1_cid WITH 10 BUCKETS 就恢复正常,想请教一下with num buckets这里的num多和少有什么区别?直方图和oracle有很大区别吗?
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
TiDB 的 统计信息直方图和 Oracle 类似,采用了等深直方图,另外我们还采用了 CM-Sketch 提高优化器的选择精度,详情阅读一下官方博客。
我看完了,但我还是不知道默认ANALYZE TABLE后直方图是生成多少?我手工执行ANALYZE TABLE tab1 index index_tab1_cid WITH 10 BUCKETS 是要用10还是100?1000?不知哪里有这数量的最佳实践或相关参考?
这个可以通过统计信息的基表查看到部分信息,比如 bucket 桶的信息,可以通过
SHOW STATS_BUCKETS [ShowLikeOrWhere];
来查看,如果希望更多实操的方法,可以看一下官网文档对于 统计信息收集的介绍。https://pingcap.com/docs-cn/stable/statistics/
ANALYZE TABLE后直方图是生成多少是214,SQL走错索引,我手工指定10就正常了
p_table20200526.zip (1.4 MB) 这个是走错索引的统计信息
非常感谢,另外请问一下我怎么能私发给你们工程师,后续如果有需要支持的话
来了老弟
20
可以填一下“联系社区专家”,会有响应的对接人的哦~
请问一下关于buckets的问题还需要我提供什么资料吗?
来了老弟
26
这边用提供的两个执行计划数据复现了一下,发现两个统计信息的执行计划都一样;
都是用一个 IndexLookup 走索引去处理了那个很大的 in 语句,问下期望走哪个索引。