TiDB-Server CPU负载很高

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

  • 【TiDB 版本】:TIDB3.0.5
  • 【问题描述】:应用接入的时候 CPU负载很高

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

stack见附件stack.txt (589.7 KB)

pprof.tidb-server.samples.cpu.001.pb.gz (263.5 KB)

  1. 请上传问题发生时间段 grafana 的 over-view 和 tidb 监控

(1)、chrome 安装这个插件https://chrome.google.com/webstore/detail/full-page-screen-capture/fdpohaocaechififmbbbbbknoalclacl

(2)、鼠标焦点置于 Dashboard 上,按 ?可显示所有快捷键,先按 d 再按 E 可将所有 Rows 的 Panels 打开,需等待一段时间待页面加载完成。

(3)、使用这个 full-page-screen-capture 插件进行截屏保存

  1. 请上传问题发生时间段的 tidb.log 和 slow log,在tidb 安装位置/log 目录下.

tidb20200521.tar.gz (887 字节)

1.再和您确认下,是 tidb-server 高吗? 看监控有一个tikv比较高,其他整体cpu到50%,但是无法分辨是哪个主机

2.应用接入时,执行 top 命令,占用 cpu 最多的是 tidb-server 进程吗?

  1. tidb的监控没有反馈。

  2. 看日志只有一些write conflict,但是没有具体的sql执行命令? 截取的日志是应用运行阶段吗?麻烦也反馈下业务sql,多谢

占用最高的是tidb-server

代码如下

  /**
    * 批量oltp
    * @param batchSize
    * @return
    */
   @Transactional
   public List batchOltp(int batchSize) {
       List list = new ArrayList();
       for (int i = 0; i < batchSize; i++) {
           OrderCertInfoModel orderCertInfoModel = geneOrderCertInfoModel();
           orderCertInfoRepository.insert(orderCertInfoModel);
           LoggerFormatUtil.info(log, "insert success,id={0}", orderCertInfoModel.getId());

           orderCertInfoModel.getExtendField().put("hello", "world");
           orderCertInfoRepository.updateById(orderCertInfoModel);

           list.add(orderCertInfoRepository.selectById(orderCertInfoModel.getId()));
       }

       return list;
   }

  1. 看了一下之前提供的火焰图,parser 以及 compile 使用的时间较长,建议可以尝试使用 prepare 的方式来减少重复解析的 CPU 消耗。看有没有缓解。
  2. 如果问题依旧麻烦提供下 TiDB 的 dashboard 监控 (不是 over view 的)。
  3. 检查一下有没有相应的 slowlog

已经加了prepare 处理

模型如果改成批量3条负载不高,改高批量5条插入就很慢

你好,

请问下当前程序并发设置多少? 3 → 5 可能是快要一倍的压测增长

看 qps 达到 8w+ 还是很高的,tidb-server 负载高也是正常。

你好,现在的问题不是负载高而是插入慢吗?有没有大致的数据?(CPU 以及 QPS 的对比) 另外从上面给的监控上来看,tikv 之间的 CPU 负载不太均衡,麻烦提供一下 tikv-trouble-shooting 这个面板的监控截图。