我有一个表,在sql server 2000中说“xxx”。一个.exe通过sql job将数据插入到表“xxx”中。但是一旦插入数据,一个存储过程就是从“xxx表”读取数据并将其插入/更新到其他两个表中,并将状态更新回到同一个“xxx”表中。现在,客户端说在“xxx”表上发生了多个死锁。请友好地告诉我解决这个死锁问题的决议步骤,以及如何逐步识别它.............
提前致谢..... XXX
答案 0 :(得分:5)
即使我可以访问您的系统和所有代码,这也是一个非常难以解决的问题。也就是说,你没有在你的问题中提供很多细节。
因此,应用Reducing SQL Server Deadlocks的一般规则:
答案 1 :(得分:0)
您可能会尝试将提示应用于读取行的查询:with(updlock,holdlock)。尝试创建在选择阶段使用的聚簇索引(如果没有)。如果可能的话,尽量缩小事务中处理的行数。
是否可以先更新表中的行,然后填充其他表?如果出现错误,您可以回滚交易。
我建议不要使用NOLOCK提示,尤其是在更新相同数据时。
答案 2 :(得分:0)
根据我使用Sql Server 2000的经验来解决死锁的最佳方法是限制查询内的并行性。 这可以通过添加查询(插入和SP)甚至只是在查询末尾插入提示选项(Maxdop 1)来完成
这会限制性能,但您可以安全执行。 如果只有一个线程正在运行,则没有其他线程可以死锁。