集群中tidb CPU全部100%,查询非常慢

看了tidb.log,没有panic信息,慢查询相关的只有下面的这种log:

[2020/11/02 17:22:31.057 +08:00] [WARN] [expensivequery.go:168] [expensive_query] [cost_time=9.290036567s] [conn_id=2648636] [user=root] [database=INFORMATION_SCHEMA] [txn_start_ts=0] [mem_max="1394527132 Bytes (1.2987545989453793 GB)"]
[sql="select count(*) from slow_query"]

好的,那问题应该明确了:

  1. 最开始查询 slow_query 导致 tidb server cpu 达到 cpu 达到 100% 应该是 慢日志文件太多导致的。(不过即便是如此,也不应该占用 100% 的 cpu 太久,此处后面需要优化下)。
  2. select * from slow_query limit 10; 查询慢是单行数据量太大导致的,大部分的耗时应该都消耗在把数据发往 client 上,数据库测得执行耗时在 9.2 秒左右。

@qihuajun 方便把慢日志私发给我们吗? 应该是慢日志里面某些记录很大,导致查询很久,我们可以针对这种慢日志单独优化或者改进下。

嗯,客户端和服务器之间的网络带宽的确不是很高,这应该是造成响应慢的主要原因。

单行慢查询的数据量太大主要是因为读取分区表造成的,下面我贴了一个截图示例,慢日志我就不发了,基本上都是这种的。

@qihuajun 查询 slow_query 是 plan 字段返回的数据很大是吗? 可以这个 sql select max(length(plan)) from slow_query;

看下这个 plan 最大有多大吗?

112116036

@qihuajun 好的,非常感谢。

不客气,应该的。

:+1: