mysql 大量更新请求 updating 状态

2016 年 3 月 24 日
 sujin190
每秒大概 100 个更新, 200 万左右数据,每次都是有索引更新,每次更新一条记录,大量处于 updating , mysql 更新操作有这么慢么?还好多都更新等待超时了,或者该怎么找出哪的问题么?
7551 次点击
所在节点    MySQL
58 条回复
msg7086
2016 年 3 月 24 日
SSD ?
peter999
2016 年 3 月 24 日
是事务表吗?
Lpl
2016 年 3 月 24 日
你查查目前更新的语句,是不是卡在某个 sql 上了?
sujin190
2016 年 3 月 24 日
@msg7086 普通磁盘,磁盘 io 不高啊
sujin190
2016 年 3 月 24 日
@peter999 事务表?
sujin190
2016 年 3 月 24 日
@Lpl 没有,只是每个都很慢,经常等待几十秒的
lj0014
2016 年 3 月 24 日
innodb 还是 myisam
sujin190
2016 年 3 月 24 日
@lj0014 innodb
lecher
2016 年 3 月 24 日
索引重建的成本太高?建个测试环境试试删除索引后的更新耗时。看看具体的 SQL 和索引。
简单粗暴 SSD ,应该效果拔群。
noahzh
2016 年 3 月 24 日
索引更新指的是更新索引,还是通过索引更新?
sujin190
2016 年 3 月 24 日
@noahzh 通过索引更新,更新的不是索引字段
sujin190
2016 年 3 月 24 日
@lecher 根据有索引的字段更新,但跟更新的不是索引字段,有索引的字段 insert 之后就没有更新过了,这种情况除了 io 问题之外还有可能是其他问题么?更新的那个字段默认是 null ,更新之后有值,这种情况有有限么?
cevincheung
2016 年 3 月 24 日
postgresql 。
sujin190
2016 年 3 月 24 日
@lecher varchar 类型,更新之后值不超过 64 字符
lecher
2016 年 3 月 24 日
那只能拆解问题了。
update 毕竟分两步,先查后改。如果每次只是根据索引更新一条,试试拆成查询看看查询消耗。

如果不是需要重建索引,感觉问题很可能出现在查询这块的消耗上。用 EXPLAIN 分析一下操作的影响行数,如果建的索引用得好,查询的影响行数估计就只有几个。


之后才是测试取单行的标识 id 直接做更新操作, varchar 是变长字段,改动是会影响行数据的长度的。但应该不会出现那么大的耗时。
sujin190
2016 年 3 月 24 日
@lecher 根据索引更新,是唯一索引,所以每次肯定也只影响一行,其实平常是正常的,只是并发稍高一些的时候会慢,但看 cpu 和磁盘 io 似乎并不高,每秒大概两三百写, cpu 10%左右,这样应该不算高吧?
wuyadong
2016 年 3 月 24 日
这种情况,我一般先全部 delete 掉,然后在 insert ,最后重建索引, update 很慢。
sujin190
2016 年 3 月 24 日
@wuyadong 可是不能删。。
likuku
2016 年 3 月 24 日
InnoDB 相关设定,都默认的么?
likuku
2016 年 3 月 24 日

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/266017

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX