即使使用索引,更新查询也要花费时间

时间:2019-06-12 15:19:04

标签: mysql sql insert-update

我有以下UPDATE查询

UPDATE Member 
SET Gem=Gem+1 
WHERE UserId='4200000' 
LIMIT 1

该表成员有4,250,000行,而 UserId 是索引,大约有62G。现在,查询花费的时间大约为0,但是问题开始于高峰时间,当大约2500个连接/进程发送此简单查询需要更多的时间时。

我搜索了很多东西却找不到任何东西。服务器硬盘驱动器为Nvme且不忙,此处显示顶部打印:

  

平均负载:3.60,3.26,3.39%Cpu:22.2 us,9.0 sy,0.0 ni,66.7 id,0.5 wa,0.0 hi,1.6 si,0.0 st KiB Mem:总61679480,622156免费,52283348使用的8773976 buff / cache KiB交换:总计30932988,免费的11625264,使用的19307724。 8401896可用Mem

CPU没有发票,RAM仅获得innodb_buffer_pool保留52G。

我得到的唯一帮助是LOCK SET 但找不到有用的东西。

如您所见,源代码中没有问题,如何才能知道简单的索引查询在峰值时间内花费时间呢?

1 个答案:

答案 0 :(得分:0)

由于您的用户ID是整数和INDEXED,因此此查询

UPDATE成员 设定宝石=宝石+1 WHERE UserId ='4200000' LIMIT 1

如果您要删除

,则

的效果会更好。 用户ID数据。您正在引起TEXT查找,而不是使用INTeger数据 找到要修改的行。请在繁忙时间的计时前后发布。

SELECT @@ innodb_io_capacity的结果是什么?制造商对使用NVME模型进行顺序写入的IOPS提出什么要求?