SQL Server目前无法获取LOCK资源 - 怎么办?

时间:2008-11-14 12:46:44

标签: sql-server sql-server-2005 multithreading

我在SQL Server 2005上有一个存储过程,可执行Serializable Transaction。在此事务中,它选择一个带有rowlock的表。在过程结束时,在回滚/提交之后,它将事务隔离级别设置为Read Commited。

此过程正在运行,不同进程具有受这些约束控制的并发访问,但突然之后,一段时间后,某些进程抛出了Sql异常:

  

SQL Server的实例   数据库引擎无法获取LOCK   此时的资源。重新运行你的   当活动较少时的语句   用户。询问数据库管理员   检查锁和内存   此实例的配置,或   检查长时间运行的交易。

这是不可预测的,可以提前或一小时后发生。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:3)

你的记忆锁太多了。增加ram或重写查询以使用更少的锁。 serializable是一种锁定猪。你真的需要吗?

答案 1 :(得分:0)

我通过减少服务器之间传递的数据范围解决了这个错误, 这意味着如果您选择1000条记录,请尝试将交易分为两批,分别为500条记录和另外500条记录 继续减少数量,直到错误停止