MySQL 迁移 TiDB 后出现查询速度反而降低的情况

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
云服务器

【概述】 场景 + 问题概述
场景:单表数据达到3000万,针对字段条件统计慢(100s以上),由MySQL迁移到TiDB,统计速度上升了
问题:查询或根据字段条件查询速度降低了,比如,select id from table_tracknumber order by id desc limit 1;需要3s
【背景】 做过哪些操作
表迁移
【现象】 业务和数据库现象
查询语句比原来慢,导致一些功能响应速度降低
【问题】 当前遇到的问题
查询速度降低,
【业务影响】
api调用速度降低,出现超时情况
【TiDB 版本】
TiDB-v5.0.0
【应用软件及版本】

【附件】 相关日志及配置信息
查看附件TiDB.txt

  • TiUP Cluster Display 信息
    查看附件TiDB.txt
  • TiUP CLuster Edit config 信息
    查看附件TiDB.txt

监控(https://metricstool.pingcap.com/)
查看附件tidb-biguser-PD_2021-09-04T06_19_45.467Z.json (2.9 MB) tidb-biguser-TiDB_2021-09-04T06_18_09.472Z.json (2.6 MB) tidb-biguser-TiKV-Summary_2021-09-04T06_21_09.005Z.json (1.5 MB) TiDB.txt (496.9 KB)

  • TiDB-Overview Grafana监控
  • TiDB Grafana 监控
  • TiKV Grafana 监控
  • PD Grafana 监控
  • 对应模块日志(包含问题前后 1 小时日志)

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

1 个赞

可以放个 explain SQL 的图上来么?

最好在放个 explain analyze SQL 的图上来…

慢日志的plan结果有点长,170+行,放附件TiDB.txt,帮忙看下~

看到结果拉,相关的数据表是不是有很大的数据变动,我看计划中遍历的row数量有点不对,我建议你先做下表的数据分析,

analyze table  xxx;

参考文档
https://docs.pingcap.com/zh/tidb/v5.0/sql-statement-analyze-table#语法图

你先试试效果

好的,谢谢你的贡献~这边看下

然后,数据变动是指会经常更新么,表确实是会不断更新数据的

row数量是因为表按月分区,条件里没有时间作为条件

analyze table xxx;这个弄了之后还是一样呢

这边看了,主要是Tidb的Compile_time、Optimize_time的时间占用,请问这块如何优化
image

还有很大的优化空间咯… 这个只能用 explain 来看结果进行优化了

1,plan结果在TiDB.txt中有的,谢谢帮忙看下,因为从慢日志及“ * Compile_time :表示这个语句在查询优化阶段花费的时间。”这句说明,目前感觉无从入手


2,plan结果170+行,是分区使然,这边确认下去掉分区后效果怎样

表是按月分区,然后查询的时候where条件中没有分区关键字,有没有可能是这里的问题。没有分区关键字应该会扫描所有分区吧。

1 个赞

你的把你analyze table 之后的,explain 发出来

分区不会有什么问题的,但是 SQL 本身 不是按照 最佳实践的方向写出来的,一定拿不到好结果

分区的本意,就是可以让筛选数据时,可以过滤更小的范围,不用扫描无关的部分,除了加速外,还能减少资源的消耗

是的,where条件中没有时间这个分区关键字,过滤范围不会精确到一个分区,
只是有个情况是,原来的MySQL也是这样的,然后现在速度相对降低了

如果有大量的空分区,检索这些空分区也会产生损耗吧~ 之前还遇到过分区内索引失效的情况,不过应该不适用这里。

1 个赞

先按楼上大佬的思路排查吧~

但是,给我的感觉就是设计不合理,既然按日期分区,那业务操作就必然落到某个时间范围上。

1 个赞

那设分区干嘛 :sweat: 可以拿掉了,走索引岂不更美

我们之前按月分区,一下子将未来10年的分区都分好了。可以想象有多少空分区。
主要是这个不能自动添加分区,只能手工添加,所以我们的工程师就一下子加了10年~

1 个赞

谁设计的方案,,可以拖出去打PP了~ :+1::ghost::grin:

1 个赞

好的,最佳实践的方向,帮忙指下什么样的,下面是慢日志中刚出现的截图,TiDB.txt附件一并更新了


explain结果
TiDB.txt (626.3 KB)

很多分区都是和查询的数据无关的…

这个查询不能限制到某个分区么?

是的,业务操作最好落到时间范围,目前是会有部分场景没能满足这样条件的

是的,客户导入数据,导入前检查是否表中有数据,目前检查范围是没能限制到某个分区