执行查询脚本后,TiKV节点CPU占用非常高,查询长时间无响应结果

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本】CentOS 7.4 内核 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
  • TiDB 版本】TiDB-v3.0.3
  • 磁盘型号】华为虚拟户fusion sphere的虚拟磁盘
  • 集群节点分布】 4个tikv节点,3个pd节点,3个tidb server,其中 3个pd和3个tidbserver复用
  • 数据量 & region 数量 & 副本数】数据量200G
  • 集群 QPS、.999-Duration、读写比例
  • 问题描述(我做了什么)】在执行查询脚本后,tikv所有节点都占用很高的CPU,同时查询结果长时间没有返回,其他统计参数请查看下面上传图片
  • 关键词1 2 3 5 6 7

描述的比较模糊,具体执行的是什么查询,qps 多少? 可以看一下 tidb slow query log 里的 sql 语句,如果并发较高,并且都是访问数据很多的大查询,会出现这个现象。

楼主是我同事,我补充一些信息。 目前看查询很不稳定,有的时候会超时,有的时候能出结果。具体的查询语句如下:

SELECT sql_no_cache a.item_id FROM pm_item a where ** ** item_id in (从oracle取来的1W-10W条数据,数量比较多这里就省略了) ** AND (((std_id = 1710 AND item_value_num > 140 AND item_value_num < 300) ** ** OR (后面是很多条件));**

通过这样的语句我们来过滤一些数据,反馈给程序。

pm_item这个表大概有6亿条数据

昨天测试了一下性能,当oracle取来的数据超过4w条以上的时候,就会超时,无法查询出结果,提示 ERROR 9002 (HY000): TiKV server timeout,当oracle取来的数据在4w以下的时候,能查到结果。 但是今天5000条数也提示这个超时了,不过我们是同时执行类似7个这样的查询语句。

希望各位大神解救。

看这个描述,SQL 比较复杂,且数据量较大,对资源消耗过多,需要优化 SQL 语句,或者扩容机器。 可以发一下 sql 的执行计划看一下。如果对 SQL 执行时间要求不高,可以修改一下 tidb 变量 tidb_distsql_scan_concurrency 为 4 ,减轻 tikv 压力。

您好,tikv为啥会超时?而且有的时候能出结果,有的时候却不能,这个很奇怪。目前系统上面没有什么负荷,我们是作为mysql的从库和备份,基本没有什么业务,目前想把部分查询切换到tidb,所以做了类似的测试。

上面不是说了 cpu 使用率很高吗? 从监控图上看确实是很高, tikv 需要负责一部分计算工作,访问数据比较多的情况会出现负载比较高,另外需要看一下 tikv 节点是否有发生过重启。 tikv 配置什么样?