首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Server 2016中禁用锁升级的缺点是什么?

在Server 2016中禁用锁升级的缺点是什么?
EN

Database Administration用户
提问于 2017-09-21 01:58:03
回答 1查看 7.9K关注 0票数 5

在I3 32 cpu 240 32 2012R2服务器上在AWS上使用Sever 2016。

我们有导入过程,当用户登录需要更新表A时,可以将其作为select 100,000或行插入表A。

导入进程正在导致锁升级,因为它使用了5000多个锁。这将阻止用户登录。

我们可以修改表以禁用锁升级。

然而,这样做的代价是什么。

这仅仅是因为我们为锁消耗了更多的内存(我们有足够的200 it内存),就是这样吗?或者是其他的问题。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-09-21 02:37:41

正如Erik和大多数专家所提到的,包括Microsoft在内,他们建议减少批处理大小/更改隔离级别/重写查询,但不要禁用锁升级。

参考:

锁升级是SQL Server使用的一种优化技术,用于控制SQL Server的锁管理器中持有的锁的数量。

在SQL Server中,锁升级具有非常有用的作用,因为获取和释放数千个锁的开销会使查询的效率最大化,否则就会减慢查询的效率。锁升级还有助于最小化所需内存,以跟踪锁。SQL Server可以为锁结构动态分配的内存是有限的,因此,如果禁用锁升级并且锁内存增长到足够大,为任何查询分配额外锁的尝试可能会失败,并发生以下错误:

错误: 1204,严重性: 19,状态:1此时Server无法获得锁资源。在活动用户较少或要求系统管理员检查Server锁和内存配置时,重新运行您的语句。

数据库引擎

实例的

升级阈值

每当锁的数量大于锁定升级的内存阈值时,数据库引擎就会触发锁升级。内存阈值取决于锁配置选项的设置:

  • 如果锁选项设置为其默认设置为0,则当锁对象使用的内存为数据库引擎所用内存的24 %(不包括AWE内存)时,将达到锁升级阈值。用来表示锁的数据结构大约是100字节长。此阈值是动态的,因为数据库引擎动态地获取和释放内存以适应不同的工作负载。
  • 如果锁选项是0以外的值,则锁升级阈值为锁选项值的40 %(或者如果存在内存压力)。

以前也有人问过类似的问题,答案没有被接受,但有一些有用的信息。

禁用锁升级的缺点

票数 6
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/186491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档