mysql 主从同步进程死锁求解?

pyruby 发布于 2013/05/06 09:38
阅读 2K+
收藏 3

上图是我mysql 从同步进程锁住的时候一张截图。数据库引擎是myisam,途中我们看到当前同步进程正在update web_company这张数据表,该进程locaked后,导致了select web_company语句一直在等待。一旦死锁后,改进程kill不掉了就,主从也停不掉,mysql也不能正常停止,只能强制杀死,强制杀死后数据表就损坏了,我只能修复,已经出现三次了,这段时间。我的web_company数据也就一百多万,其它也有一百多万数据的数据表,也从来没有死锁过。

以下是问题补充:

@pyruby:我搞错了顺序了,应该是查询语句卡住,导致主从同步update被locked了。卡住的查询语句可是SELECT company_id,company_name,字段, 字段, 字段, 字段 FROM web_company WHERE company_id in(1429050,1429042,1429027,1429019,1428944,1428929,1428933,1428903,1428843,1298245,13331) (2013/05/06 10:48)
加载中
1
卖红薯
卖红薯

围观中,插入和更新容易引起表锁是必然的,主要是要看锁表多久,如果是多条SQL引起的,可能还要复杂一点,如果只是一条SQL经常出现表锁,则可以通过拆分SQL,减轻查询和运算的成本来缓解,大一些的应用,应该考虑用缓存抵挡更新的压力,如果不是很在乎innodb下count的慢速度,其实完全可以用innodb代替myisam,在有条件查询的情况下,innodb和myisam效率差不多。

如果上面的修改代码和引擎的办法还不能解决,那只能通过分表来减轻表扫描和锁表的压力了。业务到了一定程度,重构架构是必然的。

十一文
十一文
说话靠谱
0
宏哥
宏哥

还继续用mysql?

那这就是命了。

0
pyruby
pyruby

引用来自“宏哥”的答案

还继续用mysql?

那这就是命了。

mysql怎么啦,惹你招你啦,呵呵
0
宏哥
宏哥

引用来自“宝仔love”的答案

引用来自“宏哥”的答案

还继续用mysql?

那这就是命了。

mysql怎么啦,惹你招你啦,呵呵

mysql这种问题, 基本上无解, 那个iasm是不支持真正的“并发”

这货就这样

要么扔, 要么你就享受F K

0
pyruby
pyruby

引用来自“宏哥”的答案

引用来自“宝仔love”的答案

引用来自“宏哥”的答案

还继续用mysql?

那这就是命了。

mysql怎么啦,惹你招你啦,呵呵

mysql这种问题, 基本上无解, 那个iasm是不支持真正的“并发”

这货就这样

要么扔, 要么你就享受F K

这样啊,换的成本太高了,大象和海狮一点都没玩过的
0
戴威
戴威
没有很好的解决办法,不过帮你 @红薯
0
宏哥
宏哥

引用来自“宝仔love”的答案

引用来自“宏哥”的答案

引用来自“宝仔love”的答案

引用来自“宏哥”的答案

还继续用mysql?

那这就是命了。

mysql怎么啦,惹你招你啦,呵呵

mysql这种问题, 基本上无解, 那个iasm是不支持真正的“并发”

这货就这样

要么扔, 要么你就享受F K

这样啊,换的成本太高了,大象和海狮一点都没玩过的

你换innodb试试看, 说不定能凑合用用

女怕嫁错郎

男怕上错船

mark35
mark35
男怕上错床,FK错了既无快感也不幸福还得善后
0
逝水fox
逝水fox
查询频繁的时候,最好就不要岁表搞这种大范围的更新,最好带id,myisam就更不用说了。记得当时几分钟才删不到1000条数据,彻底无奈了...
0
pyruby
pyruby

引用来自“逝水fox”的答案

查询频繁的时候,最好就不要岁表搞这种大范围的更新,最好带id,myisam就更不用说了。记得当时几分钟才删不到1000条数据,彻底无奈了...
我现在是这样的:SELECT company_id,company_name,字段, 字段, 字段, 字段 FROM web_company WHERE company_id in(1429050,1429042,1429027,1429019,1428944,1428929,1428933,1428903,1428843,1298245,1378894,1428555,1428516,1428567,1428513,1428270,1428349,1428315,1428274,1428158) 这个语句卡住了,导致主从同步update语句被locked了。上图的查寻语句没有完全显示出来
0
pyruby
pyruby

引用来自“宏哥”的答案

引用来自“宝仔love”的答案

引用来自“宏哥”的答案

引用来自“宝仔love”的答案

引用来自“宏哥”的答案

还继续用mysql?

那这就是命了。

mysql怎么啦,惹你招你啦,呵呵

mysql这种问题, 基本上无解, 那个iasm是不支持真正的“并发”

这货就这样

要么扔, 要么你就享受F K

这样啊,换的成本太高了,大象和海狮一点都没玩过的

你换innodb试试看, 说不定能凑合用用

女怕嫁错郎

男怕上错船

innodb查询比myisam慢这个你不知道?
返回顶部
顶部