我在SQL Server 2005上有一个存储过程,可执行Serializable Transaction。在此事务中,它选择一个带有rowlock的表。在过程结束时,在回滚/提交之后,它将事务隔离级别设置为Read Commited。
此过程正在运行,不同进程具有受这些约束控制的并发访问,但突然之后,一段时间后,某些进程抛出了Sql异常:
SQL Server的实例 数据库引擎无法获取LOCK 此时的资源。重新运行你的 当活动较少时的语句 用户。询问数据库管理员 检查锁和内存 此实例的配置,或 检查长时间运行的交易。
这是不可预测的,可以提前或一小时后发生。
我该怎么做才能解决这个问题?
答案 0 :(得分:3)
你的记忆锁太多了。增加ram或重写查询以使用更少的锁。 serializable是一种锁定猪。你真的需要吗?
答案 1 :(得分:0)
我通过减少服务器之间传递的数据范围解决了这个错误, 这意味着如果您选择1000条记录,请尝试将交易分为两批,分别为500条记录和另外500条记录 继续减少数量,直到错误停止