我有以下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 但找不到有用的东西。
如您所见,源代码中没有问题,如何才能知道简单的索引查询在峰值时间内花费时间呢?
答案 0 :(得分:0)
由于您的用户ID是整数和INDEXED,因此此查询
UPDATE成员 设定宝石=宝石+1 WHERE UserId ='4200000' LIMIT 1
如果您要删除,则
的效果会更好。 用户ID数据。您正在引起TEXT查找,而不是使用INTeger数据 找到要修改的行。请在繁忙时间的计时前后发布。
SELECT @@ innodb_io_capacity的结果是什么?制造商对使用NVME模型进行顺序写入的IOPS提出什么要求?