免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2466 | 回复: 8
打印 上一主题 下一主题

求救一个mysql5.5.10问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-11 23:33 |只看该作者 |倒序浏览
centos linux 5.5 上的java web应用,使用的数据版本是 mysql5.5.10,安装有cft全文索引插件,未做读写分离,主要的数据表使用的myisam引擎,
配置文件中 concurrent_insert=2,现有时出现数据库表锁无法释放的现像。
在出故障时,我使用 show full processlist ,发现大量的 "Waiting for table lavel lock",使用 mysqladmin debug 后,错误日志片段:

Status information:

Current dir: /var/lib/mysql/
Running threads: 84  Stack size: 262144
Current locks:
lock: 0x110402a0: write
write     : 0x11054508 (175458:7);

lock: 0x10095420:

lock: 0x2aaaf4008fc0: write
write     : 0x2aaaf4009998 (175388:7);

lock: 0x2aaaf4002460: write
write     : 0x2aab0012a668 (175405:10);

lock: 0x2aaaf46ce7a0:

lock: 0x2aaaf40629a0: write read_wait
write     : 0x1003ec08 (175339:10);
read_wait : 0x11630a28 (175407:2); 0x2aaaf4330398 (175408:2); 0xfc6afd8 (175409:2); 0x100c0978 (175412:2); 0x2aaaf40fdc98 (175413:2); 0x2aaaf4121c18 (175415:2); 0x2aaaf4f51028 (175417:2); 0x11631b48 (175419:2); 0x2aaaf46e35e8 (175424:2); 0x2aaaf403b458 (175425:2); 0x2aaaf49012a8 (175427:2); 0x2aaaf42d9b48 (175426:2); 0x2aaaf41fe6a8 (175429:2); 0x10eeeef8 (175433:2); 0x118207e8 (175435:2); 0x106c20d8 (175441:2); 0x104a7cc8 (175445:2); 0x10478018 (175447:2); 0x2aab00009368 (175450:2); 0x104fb398 (175451:2); 0x13aca138 (175453:2); 0x10fc8b78 (175455:2); 0x13af3798 (175456:2); 0x1113b9e8 (175461:2); 0x11104b68 (175463:2); 0x111147e8 (175464:2); 0x11124c48 (175465:2); 0x110bd668 (175466:2); 0x110cdeb8 (175467:2); 0x110de8f8 (175468:2); 0x11149458 (175469:2); 0x11159ca8 (175470:2); 0x1116a4f8 (175471:2); 0x1117ad48 (175472:2); 0x1118b788 (175473:2); 0x1119bfd8 (175474:2); 0x111aca18 (175475:2); 0x111bd268 (175476:2); 0x111e1328 (175477:2); 0x1121e388 (175478:2); 0x11355868 (175480:2); 0x11379bb8 (175481:2);

……
(省略若干行)

……

lock: 0x105b4c0:

lock: 0x105b3e0:


Key caches:
default
Buffer_size:    1073741824
Block_size:           1024
Division_limit:        100
Age_limit:             300
blocks used:        482985
not flushed:           246
w_requests:        7745093
writes:            7450887
r_requests:     130606326577
reads:            11351574


handler status:
read_key:   33334446032
read_next:  45965923374
read_rnd      10618011
read_first:    5627070
write:      30598063983
delete         1833997
update:      246197881

Table status:
Opened tables:      12950
Open tables:          202
Open files:            91
Open streams:           0

Alarm status:
Active alarms:   0
Max used alarms: 0
Next alarm time: 0

Thread database.table_name          Locked/Waiting        Lock_type

35799   t.mtb1           Locked - write        Concurrent insert lock
35799   t.mtb1             Locked - read         Read lock without concurrent inserts
175339  t.tb_s                  Locked - write        Low priority write lock
175387  t.tb_m             Locked - read         Read lock without concurrent inserts
175387  t.tb_ma           Locked - write        Concurrent insert lock
…… (省略若干行)……
175388  t.tb_o                 Locked - write        Concurrent insert lock
175399  t.tb_p                  Locked - write        Concurrent insert lock



很多锁等待状态的process也kill不了,现在就是无法确定问题出在哪里,是不是因为读写操作太频繁没作读写分离?

接手mysql服务器管理工作时间不长,特来请求帮助

论坛徽章:
0
2 [报告]
发表于 2011-10-12 09:59 |只看该作者
myisam只有表锁,如果有大查询或者长时间的事务,出现锁是非常正常的,建议改换innodb,或者读写分离

论坛徽章:
0
3 [报告]
发表于 2011-10-12 18:29 |只看该作者
谢谢谢谢,有回复呢,呵呵。  
:)

问题在于,一旦出问题,所有的数据请求无论是读还是写都无法响应,服务应该是处于瘫痪状态,不断的有新的process连接进来也全部都在processlist里是等待状态,直到把最大连接数冲满,网站的业务量和并发量我估计似乎应该不是很大,所以我想确认这种状态是否就是由于并发高导至的,哪位的mysql环境出现在由于高并发量导至和我类似的服务瘫痪的情况吗?

论坛徽章:
0
4 [报告]
发表于 2011-10-20 14:28 |只看该作者
自己UP一下啊

这个现象没人遇见过吗?
如果是服务器并发太高,会是我遇见的这种状态吗?

论坛徽章:
0
5 [报告]
发表于 2011-10-20 15:04 |只看该作者
本帖最后由 horizonhyg 于 2011-10-20 15:06 编辑

回复 4# bigoldboy


    是你的表锁了,然后都阻塞在那了,不一定是并发问题,可能是有sql写的不规范或者不优化,导致大量表锁等待,线程等待之后,你的web就取不到空闲的了,他就会重新创建连接,所以就会越来越多,直至瘫痪。你可以
  1. show processlist
复制代码
看看是不是有很多线程等待,如果是建议优化sql,更建议换成innodb。

论坛徽章:
0
6 [报告]
发表于 2011-10-20 20:12 |只看该作者
回复 5# horizonhyg

用show full processlist是看到有大量的等待状态的process。

    我再描述一下问题:

出问题时,用我使用 show full processlist ,发现大量的 "Waiting for table lavel lock",说明有表级锁无法释放,并且是一直锁着不释放(请注意是表被某个process一直锁着,就像“死锁”)。

一般情况下一个process执行完后,应该会释放锁的吧,可我看到的是有几个状态为"query end"的process锁住了表并且没有释放表锁,后续的请求无论是查询还是修改都是等待。

另外,被锁的表上有触发器,并且有基于这个表的视图,是否是mysql触发器和视图也有不好的影响?

论坛徽章:
0
7 [报告]
发表于 2011-10-21 12:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2011-10-22 09:17 |只看该作者
回复 6# bigoldboy


    我觉得是有死锁,或者还是更新写操作特别频繁,总的来说mysiam就是这样,它只有表级锁,任何的更新写操作都会锁表。

论坛徽章:
0
9 [报告]
发表于 2011-10-22 23:43 |只看该作者
嗯,谢谢各位,有方向鸟{:2_172:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP