【新手请教】根据主键更新update消耗50s,要如何优化呢

表里的数据大概在5000w左右,根据主键更新消耗50s,这个可能是什么原因导致的呢?要如何优化


应该是锁冲突了,根据这个文档看看能不能排查一下
TiDB 锁冲突问题处理 | PingCAP Docs

1 个赞

调整这个参数试试 tidb_distsql_scan_concurrency

  • 作用域:SESSION | GLOBAL
  • 默认值: 15
  • 范围: [1, 256]
  • 这个变量用来设置 scan 操作的并发度。
  • AP 类应用适合较大的值,TP 类应用适合较小的值。对于 AP 类应用,最大值建议不要超过所有 TiKV 节点的 CPU 核数。
  • 若表的分区较多可以适当调小该参数,避免 TiKV 内存溢出 (OOM)。
1 个赞

另外,TiDB的部署架构和服务器配置能不能发一下?

看下执行计划,最好是分批提交。

看截图,50s耗时,不在采集的时间点范围内

我看updaet里用了函数。

看下这SQL前后的CPU和网络情况,总的cpu可以看overview、tikv detail. black_exportor有Ping延迟

可以参考这个图 查相关资源使用及其监控项

从执行计划来看,SQL慢在Ponit_Get这一步,也就是使用主键或唯一索引进行等值查询的这一步,后面有operation info那里有个lock,估计是锁冲突

图片放不大。

你好这是我们的配置,用的是云混盘
image

您好,发一下完整的执行计划,3q。

后面的也贴出来,看着应该是等锁

请查查有没有锁,别说是主键了,就是全表也不至于这么慢。基本是锁导致的。

果断收藏。

看执行计划走的是point_get,说明走主键了。看看tidb日志里面有否有锁冲突的相关报错内容。