在 I3 32 cpu 240GB 2012R2 服务器上的 AWS 上使用 SQL Sever 2016。
我们有导入过程,将选择的 100,000 行或行插入表 A。用户登录时需要更新表 A。
导入过程正在导致锁升级,因为它使用了 5000 多个锁。这会阻止用户登录。
我们可以更改表以禁用锁升级。
然而,这样做的代价是什么。
仅仅是因为我们为锁消耗了更多内存(我们有 200GB 足够的内存),仅此而已吗?或者是其他任何问题。
正如 Erik 所提到的,包括 Microsoft 在线书籍在内的大多数专家都建议减少批量大小/更改隔离级别/重写查询,但不要禁用锁升级。
参考:
锁升级是 SQL Server 使用的一种优化技术,用于控制 SQL Server 的锁管理器中持有的锁数量。
锁升级在 SQL Server 中起到了非常有用的作用,它可以最大限度地提高查询效率,否则会因获取和释放数千个锁的开销而变慢。锁升级还有助于最小化跟踪锁所需的内存。SQL Server 可以为锁结构动态分配的内存是有限的,因此如果禁用锁升级并且锁内存增长到足够大,则尝试为任何查询分配额外的锁可能会失败并出现以下错误:
错误:1204,严重性:19,状态:1 SQL Server 此时无法获取 LOCK 资源。当活动用户较少时重新运行您的语句或要求系统管理员检查 SQL Server 锁和内存配置。
数据库引擎实例的升级阈值
只要锁数大于锁升级的内存阈值,数据库引擎就会触发锁升级。内存阈值取决于锁配置选项的设置:
之前有人问过类似的问题,答案未被接受,但有一些有用的信息。
| 归档时间: |
|
| 查看次数: |
5592 次 |
| 最近记录: |