Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何删除SQLServer2005中的死锁?_Sql Server 2005_Deadlock_Database Deadlocks - Fatal编程技术网

Sql server 2005 如何删除SQLServer2005中的死锁?

Sql server 2005 如何删除SQLServer2005中的死锁?,sql-server-2005,deadlock,database-deadlocks,Sql Server 2005,Deadlock,Database Deadlocks,首先,我想知道SQLServer2005中死锁的实际根源是什么。是因为两个进程访问表中的同一行吗 无论如何,考虑两个表 > TabelyNoWix和 > TabLySythyYy

首先,我想知道SQLServer2005中死锁的实际根源是什么。是因为两个进程访问表中的同一行吗

无论如何,考虑两个表 > TabelyNoWix和 > TabLySythyYy<<代码>,两者都具有相同的结构。

假设有一列名为
NAME

因此,当一个进程试图在
\u Table\u Now\u
中用
NAME='BLUE'
更新记录时,首先需要将当前行
NAME='BLUE'
放入
\u Table\u History\u
中,然后进行更新
\u Table\u Now\u
,并从
\u Table\u History\u中删除以前存在的行

删除时发生死锁。我不明白为什么


请引导我

死锁基本上是指当进程A依赖于进程B而进程B依赖于进程A时,因此A将在B完成时开始\继续,而B仅在A完成时开始\继续

您可能遇到的是表(或行)锁定,因此SQL会在更新表之前锁定该行,以确保在执行更新时没有其他进程尝试访问该行

您能否更具体地说明如何执行insert\update\delete。在这种情况下,不应该出现死锁


仅供参考,不要将
与(NOLOCK)
一起使用。它将阻止锁定,但它会告诉SQL Server读取未提交的数据,这样做可能会导致数据不一致。

当进程A等待进程B释放资源而进程B等待进程A释放资源时,会发生死锁

如果我正确理解了更新的顺序,那就是:
1.现在读取表_中的一行
2.更新表_历史记录中的一行
3.立即更新表_中的一行
4.删除表_历史记录中的一行

如果您不正确地使用事务或锁,这可能是一个有风险的订单

为了避免死锁,对于每个进程,您应该执行:
1.开始事务(最好是表锁)
2.执行所有数据库操作
3.提交事务(或在数据库更新时发生任何问题时回滚)

这将确保每个进程锁定两个表,执行所有操作,然后退出


如果您已经在使用事务,那么您使用的范围和级别是什么?如果没有,介绍交易。它应该可以解决问题。

死锁通常涉及多个并发事务。您已经描述了一个事务。死锁涉及的其他事务有哪些?好的做法是通过为每个查询提供提示来避免死锁,例如
使用(NOLOCK)
使用(ROWLOCK)
,要移除锁,您可以使用
kill N
杀死其中一个spid,其中N是spid id,这将允许另一个spid在没有更多信息的情况下继续,这将很难提供帮助。这里有一个关于如何使用SQL profiler分析死锁的链接,这正是我担心的原因。在正常情况下,不应该有任何死锁。即使我打开新的查询窗口并编写一个简单的select查询,如select*FROM Table_History,其中NAME='BLUE'。。。当执行此语句时,有时会显示死锁。能否提供有关死锁是如何发生的更多信息。现在在SQLServer2005中,有些连接是可运行的,有些是休眠的,但有些是挂起的。当挂起的连接数增加时,应用程序将下降。我执行了sp_who2,我想我需要在sql server 2005中更加强大。如何学习SQLServer2005的内部工作?与上述情况类似,select查询实际上是如何执行的?任何研究材料。?在所描述的场景中,事务肯定是造成死锁的方法:)您通常可以使用步骤1中的(updlock)提示来避免它们-现在阅读表u。原因是我没有使用上述内容。如果上述任何一项不起作用,我将丢失传入记录。假设删除失败。因此,当回滚时,所有文件都将恢复。现在插入表_的优先级非常高