数据库中的死锁会影响其他数据库或挂起整个服务器吗?

Posted

技术标签:

【中文标题】数据库中的死锁会影响其他数据库或挂起整个服务器吗?【英文标题】:Can a deadlock in a databases affect other databases or hung entire server? 【发布时间】:2012-05-08 00:32:10 【问题描述】:

这听起来很奇怪,但是我们在服务器上的一堆数据库中发生了,我们可以通过日志上的输出来判断,但这似乎影响了另一个数据库,因为系统挂起时发生死锁。

我们已经确定了死锁事件中涉及的对象,但没有一个对象存在于我们正在使用的系统的数据库中。

我仍然需要查看程序主体,但这可能吗?来自其他数据库的进程进入死锁并挂起整个服务器或其他数据库?

【问题讨论】:

记录/解决锁转储后,挂起的数据库是否会恢复?我已经在 ORACLE 数据库上看到过这种情况。并不是死锁锁住了一切,只是处理器进入100%,文件IO如此密集,其他进程没有带宽。这就像死锁是排在第一位的,在完成之前它不能多任务。 (所以是的,我已经看到它发生了) 感谢@xQbert 确实服务器猫吃掉了 cpu 和 i/o 资源,这可能是一个原因。是的,它在锁定解决后得到解决。 【参考方案1】:

死锁不是 MS Sql Server 中的致命事件(与代码中的情况不同)。这是因为 Sql Server 会定期扫描死锁,然后选择要杀死的进程之一。那是您收到日志消息的时候。

没有 Sql Server 错误(我从未遇到过),我认为更有可能是顺序颠倒了 - 挂起的服务器/数据库阻止了查询的正常执行,导致死锁,因为程序需要更长的时间来执行.

【讨论】:

【参考方案2】:

我已经看到当两个处于死锁的进程同时在 TempDB 中锁定对象时会发生这种情况。

tempdb 中的锁定对象随后会阻止其他进程创建对象并因此挂起。

这是旧版本的 SQL Server (2000) 上的问题,但我不记得在较新的版本上看到过。

【讨论】:

【参考方案3】:

这是可能的。如果您的服务器无法对任何中断做出反应,它就无法(正确地)执行其他请求。

【讨论】:

以上是关于数据库中的死锁会影响其他数据库或挂起整个服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 cpu/内存使用情况或挂起的请求返回 503 服务器繁忙?

python multiprocessing.Pool kill *特定*长时间运行或挂起的进程

Mysql 死锁过程及案例详解之用户自定义锁

Mysql 死锁过程及案例详解之用户自定义锁

应用退出或挂起时处理推送负载

mysql 发生死锁问题请求帮助