【问题标题】:SQL Server Deadlocks ProcessSQL Server 死锁进程
【发布时间】:2021-04-30 04:19:15
【问题描述】:

我有两个问题..

  1. 我想确认如果一个会话正在查询一个被另一个会话锁定的表,是否会发生死锁。

  2. 当有多台计算机访问MSSQL Server进行更新和删除等操作时,如何解决上述SQL错误

enter image description here

【问题讨论】:

  • 是的,死锁可能发生,不,它不会总是甚至大多数时候。通过仔细编码可以避免死锁,但是如果没有涉及的查询、查询计划以及表和索引定义,则无法提供建议

标签: sql-server database-deadlocks


【解决方案1】:

当一个事务已经开始更改数据,与另一个事务冲突以获取排他锁时,就会发生死锁。堵塞,即使是很长的堵塞,也不一定会导致致命的锁定。 可以使用banker's algorithm 消除任何死锁,但这会导致数据库中的任何访问并发性受损,从而导致只有一个用户并行! 但是,我们可以通过以下方式减少致命锁的发生:

  1. 正确建模基础,即尊重正常形式
  2. 索引表以供读取和更新
  3. 降低事务的隔离级别
  4. 从悲观锁定(SQL Server 中的默认设置)切换到优化锁定
  5. 避免不必要的交易
  6. 减少显式事务中的请求数
  7. 更改事务中的处理逻辑顺序

【讨论】:

    【解决方案2】:

    查看下面的链接Using WITHSELECT查询使用WITH(NOLOCK)UPDATE,DELETE,INSERT使用WITH(XLOCK)..

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多