失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【MySQL】数据库死锁查询及处理

【MySQL】数据库死锁查询及处理

时间:2019-02-26 11:25:56

相关推荐

【MySQL】数据库死锁查询及处理

数据库死锁

数据库死锁是事务性数据库 (如SQL Server, MySql等)经常遇到的问题。除非数据库死锁问题频繁出现导致用户无法操作,一般情况下数据库死锁问题不严重。在应用程序中进行try-catch就可以。那么数据死锁是如何产生的呢?

InnoDB实现的是行锁 (row level lock),分为共享锁 (S) 和 互斥锁 (X)。

共享锁用于事务read一行。

互斥锁用于事务update或delete一行。

当客户A持有共享锁S,并请求互斥锁X;同时客户B持有互斥锁X,并请求共享锁S。以上情况,会发生数据库死锁。

常见的死锁原因

?有可能是因为上一个测试没有commit导致死锁

?有可能是连接池配置不合理

构建一个死锁进程

BEGIN TRANSACTION--开始事务update T_Users set UserName='00000' where UserId='123'WAITFOR DELAY '01:00'; --指定1点执行

执行查询语句:

select * from T_Users where UserId='123'

这时会发现一直在执行查询,得不到查询结果,这是死锁现象

显示哪些线程正在运行

SHOW PROCESSLIST

结束某个线程

kill 53

然后再执行查询语句就可以得到结果了。

如果觉得《【MySQL】数据库死锁查询及处理》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。