mysql 大量更新请求 updating 状态

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

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


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

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

https://www.v2ex.com/t/266017

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

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

© 2021 V2EX