gpt4 book ai didi

sql - SQL Server 为什么会出现死锁?

转载 作者:行者123 更新时间:2023-12-02 10:39:42 25 4
gpt4 key购买 nike

据我了解,当 SPID 正忙于处理另一个查询并且由于现在太忙而懒得运行另一个查询时,就会发生 SQL 死锁。 SQL Server“随机”选择一个查询来死锁所需的资源,并使其失败并抛出异常。

我有一个运行大约 40 个实例的应用程序和一个后端 Windows 服务,所有这些都访问同一个数据库。我希望减少死锁,以便增加可以同时运行的线程数量。

  1. 为什么 SQL Server 不能将新查询放入队列并在有时间且资源可用时运行它?我正在做的大部分事情有时都会等待几秒钟。
  2. 有没有办法全局设置事务隔离级别,而不必在每个新连接/ session 开始时指定它?

最佳答案

您对死锁的理解不正确。你所描述的情况是阻塞的。将两者等同起来是一个常见的错误。

当两个单独的事务各自需要不同的资源并且都不会释放它们所拥有的资源以使另一个事务可以运行时,就会发生死锁。可能更容易说明:

SPID #1 获得资源 A 的锁定SPID #2 获得资源 B 的锁定SPID #1 现在需要锁定资源 B 才能完成SPID #2 现在需要锁定资源 A 才能完成

SPID #1 无法完成(因此释放资源 A),因为 SPID #2 已拥有该资源SPID #2 无法完成(因此释放资源 B),因为 SPID #1 拥有它

由于两个 SPID 都无法完成,因此必须放弃(即被服务器选择为死锁受害者)并且会失败。

避免它们的最佳方法是保持交易规模小(所需资源数量少)且速度快。

关于sql - SQL Server 为什么会出现死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com