我已经设置了我的数据库,以便只要程序被阻止超过 45 秒,数据库就会通知 DBA 电子邮件。设置一种自动终止正在执行阻塞的进程的方法是不好的做法吗?我假设是的;但是,等到下班时间 DBA 可以拿到计算机并修复变更接缝时也有问题。有没有更好的方法来处理阻塞过程?
我已经设置了我的数据库,以便只要程序被阻止超过 45 秒,数据库就会通知 DBA 电子邮件。设置一种自动终止正在执行阻塞的进程的方法是不好的做法吗?我假设是的;但是,等到下班时间 DBA 可以拿到计算机并修复变更接缝时也有问题。有没有更好的方法来处理阻塞过程?
为了摆脱@AaronBertrand,终止进程可能会导致事务不一致,这意味着您将放弃 ACID 合规性。为什么不先记录所有耗时超过 45 秒的查询,然后基于此更改您的代码设计?
您可以通过更改隔离级别(例如 READ UNCOMMITED 或使用快照隔离)来解决锁定/阻塞问题,您可以做很多事情(快照隔离是首选,因为 READ UNCOMMITED 有很多警告,但它对 writers 没有帮助阻止作者)。
查看:
MCM 快照隔离介绍视频
锁定和阻塞故障排除的良好开端