【问题标题】:SQL Server cannot obtain a LOCK resource at this time - What to do?SQL Server 此时无法获取 LOCK 资源 - 怎么办?
【发布时间】:2008-11-14 12:46:44
【问题描述】:

我有一个在 SQL Server 2005 上执行可序列化事务的存储过程。在这个事务中,它选择一个带有行锁的表。在过程结束时,在回滚/提交之后,它将事务隔离级别设置为已提交读。

这个程序正在运行,不同的进程有这些约束控制的并发访问,但是突然,一段时间后,一些进程抛出了一个Sql Exception:

SQL Server 的实例 数据库引擎无法获得 LOCK 此时资源。重新运行您的 活动较少时的声明 用户。询问数据库管理员 检查锁和内存 此实例的配置,或 检查长时间运行的事务。

这是不可预测的,它可能会提前发生,也可能会在一小时后发生。

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

【问题讨论】:

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


    【解决方案1】:

    你的记忆锁太多了。增加内存或重写您的查询以使用更少的锁。 可序列化是一个锁猪。你真的需要吗?

    【讨论】:

    • +1 完全同意。你真的需要一个可序列化的事务吗?
    • 这是企业经理在保存表更改时所做的。 SQL Server 团队中的某个人决定我需要一个 serializalbe 转换级别。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多