tidb 一条慢SQL拖死整个集群

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

  • 【TiDB 版本】:3.0.8
  • 【问题描述】:在数据库中,平时一条SQL的响应时间最多几十毫秒,但是如果有慢SQL执行,会让整个系统的所有SQL执行响应时间上升到2秒中,拖垮整个集群,这个是什么原理导致的呢

SELECT log.result_code, count(*)
FROM merchant_log log
WHERE log.id between 2008010000000000000 and 2008012359599999999
AND log.service_name = ‘b’
AND log.merchant_id = ‘a’
GROUP BY log.result_code;

表merchant_log中数据1.3亿

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

  1. 从监控可以看到 coprocessor 的 响应时间大幅增加,由于有大查询,导致 coprocessor duration 升高,会影响其他查询 sql,那么这段时间查询整体都会慢。

  2. 从监控看网络流量很高,在这段时间也有 retrans。网卡是万兆网卡吗? 这个 sql 消耗流量也很高。

  3. 是否可以将大查询的时间调整到业务低峰期执行?

  4. 业务低峰期反馈下这个sql 的 explain analyze sql 和表结构,看下有没有优化空间

2、这个服务器是阿里云内网,实例都是IO优化型,内网带宽为万兆网络

这个SQL存在优化空间,但是不太理解为什么一条SQL,会把整个集群拖垮,就算mysql执行一个慢查询,也不会把其他所有SQL都影响了呀,我这边查询中,只使用到了一张表

如果系统中存在大量慢查询,影响整个系统我还是能够理解到,但是一条慢查询导致整个系统都慢下来,这个原理方便介绍一下吗

  1. 具体的在看下 tidb 和 detail-tikv 的监控信息,看看 tikv 的瓶颈
  2. 另外大量查询和一个大查询,你可以理解为一个大查询,相当于其他很多个查询吧,只要系统有瓶颈,都可以影响整个集群. 这是两种情况。

1、其他监控信息

2、从数据库角度出发,一条SQL导致整个数据库集群性能下降,不太能接受,有办法限制这种情况吗

tikv 监控tikv.zip (4.4 MB)

一个sql和多个sql没有什么区别, coprocessor 查询耗时多,导致整体升高,可以先优化 sql,降低大量扫描.




这个算不算tidb的一个缺陷呢,Mysql中相同的慢查询,几乎不会对系统有较大的影响,tidb并没有做到较好的资源隔离吧。

MySQL 没有有资源隔离吧,MySQL 和 Oracle 也会有这种问题, 一个大 SQL 对整个库产生影响。 不过,TiDB 在这里也会持续优化,多谢。

在mysql中,有参数innodb_concurrency_tickets限制一次CPU时间获取5000条记录,然后执行其他SQL,这样就不会有一条SQL执行其他SQL都被拖慢的情况,请问tidb中有这个类似的参数吗

目前应该没有
https://github.com/pingcap/tidb/blob/v4.0.0-rc.1/config/config.toml.example