2008-11-14 268 views
2

我在SQL Server 2005上执行一个可序列化事务的存储过程。在这个事务中,它选择一个带有行锁的表。在过程结束时,在回滚/提交之后,它将事务隔离级别设置为Read Commited。SQL Server目前无法获取LOCK资源 - 该怎么办?

这个程序运行时,不同的进程有这些限制来控制并发访问,但突然,一段时间后,一些流程抛出一个SQL异常:

在SQL Server 数据库引擎实例不能获得一个LOCK 资源在这个时候。当活动的用户较少时重新运行 声明。请数据库管理员 检查此实例的锁和内存 配置,或者检查长时间运行的事务的 。

这是不可预测的,它可能发生在早期或一小时后。

我能做些什么来解决这个问题?

回答

3

你有太多锁定你的记忆。增加内存或重写您的查询使用更少的锁。 可串行化是一个锁定猪。你真的需要它吗?

+0

+1完全同意。你真的需要一个可序列化的交易吗? – 2008-11-14 14:28:30

0

我通过减少数据范围,如果你选择1000个记录服务器之间通过, 含义解决了这个错误尝试降低交易分为两个批次500个记录和其他500个记录 保持数量减少,直至停止错误