关于buckets问题

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【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就正常了

你好。

烦请提供以下信息,帮助排查

  1. 将ANALYZE TABLE tab1 ; 和 ANALYZE TABLE tab1 index index_tab1_cid WITH 10 BUCKETS; 统计信息导出
  2. 提供下 sql 语句, 这边复现下。

p_table20200526.zip (1.4 MB) 这个是走错索引的统计信息

你好 表结构和 sql 语句麻烦已提供下。。

请问我刚传上来的表结构和SQL语句你收到了吗?

收到了,感谢回复,

d_content

表结构麻烦私信我下。

已收到,感谢,这边看下

明白了

非常感谢,另外请问一下我怎么能私发给你们工程师,后续如果有需要支持的话

可以填一下“联系社区专家”,会有响应的对接人的哦~

明白了,感谢。

已经填写了,多谢提醒

OK​:ok_hand:

请问一下关于buckets的问题还需要我提供什么资料吗?

抱歉,正在分析,有结果这边会接着反馈。

这边用提供的两个执行计划数据复现了一下,发现两个统计信息的执行计划都一样; 都是用一个 IndexLookup 走索引去处理了那个很大的 in 语句,问下期望走哪个索引。