单个表上的SQL Server死锁问题

0 sql-server deadlock sql-server-2000

我有一个表,在sql server 2000中说"xxx".一个.exe通过sql job将数据插入到表"xxx"中.但是一旦插入数据,一个存储过程就是从"xxx表"读取数据并将其插入/更新到其他两个表中,并将状态更新回到同一个"xxx"表中.现在,客户端说在"xxx"表上发生了多个死锁.请友好地告诉我解决这个死锁问题的决议步骤以及如何逐步识别它.............

在此先感谢..... XXX

KM.*_*KM. 5

即使我可以访问您的系统和所有代码,这也是一个非常难以解决的问题.也就是说,您的问题中没有提供很多细节.

因此,应用减少SQL Server死锁的一般规则:

  • 确保数据库设计已正确规范化.
  • 每次都让应用程序以相同的顺序访问服务器对象.
  • 在事务期间,不允许任何用户输入.在交易开始之前收集它.
  • 避免使用游标.
  • 保持交易尽可能短.帮助实现此目的的一种方法是通过使用存储过程或使用单个批处理来减少应用程序与SQL Server之间的往返次数.减少事务完成所需时间的另一种方法是确保您不会一遍又一遍地执行相同的读取操作.如果您的应用程序确实需要多次读取相同的数据,请通过将其存储在变量或数组中来缓存它,然后从那里重新读取它,而不是从SQL Server中读取它.
  • 减少锁定时间.尝试开发您的应用程序,以便在最近的时间抓取锁定,然后在最早的时间释放它们.
  • 如果适用,请使用ROWLOCK或PAGLOCK减少锁定升级.
  • 如果未经常修改被锁定的数据,请考虑使用NOLOCK提示来防止锁定.
  • 如果适用,请为运行事务的用户连接使用尽可能低的隔离级别.
  • 考虑使用绑定连接.