服务器配置:锁

适用范围:SQL Server

本文介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中配置 locks 服务器配置选项。 该locks选项设置可用锁的最大数目,这会限制 SQL Server 数据库引擎对其使用的内存量。 默认设置为 0,即允许 数据库引擎 根据不断变化的系统要求动态地分配和释放锁结构。

重要

在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

建议

此选项是一个高级选项,仅应由有经验的数据库管理员或认证的 SQL Server 专业人员更改。

当服务器设置为 “0设置为locks” 时,锁管理器从 数据库引擎 获取足够的内存,以便初始池为 2,500 个锁结构。 由于锁池已用尽,因此会为池获取更多内存。

通常,如果锁池所需的内存多于数据库引擎内存池中的可用内存,并且有更多计算机内存可用(max server memory阈值尚未达到),则数据库引擎动态分配内存以满足锁请求。 但是,如果分配该内存会导致在操作系统级别进行分页(例如,如果另一个应用程序与 SQL Server 实例在同一台计算机上运行并使用该内存),则不会分配更多的锁空间。 动态锁池不会获取分配给数据库引擎的 60% 以上的内存。 锁定池达到数据库引擎实例获取的内存的 60%,或者计算机上没有更多内存可用后,锁的进一步请求将产生错误。

推荐的配置是允许 SQL Server 动态地使用锁。 但是,可以设置 locks 和替代 SQL Server 动态分配锁资源的能力。 如果locks设置为其他0值,则数据库引擎不能分配的锁数不能超过指定locks的值。 如果 SQL Server 显示超过可用锁数的消息,请增加此值。 由于每一个锁都需要消耗内存(每一个锁需 96 字节),增加此值将增加服务器对内存的需求。

此选项 locks 还会影响锁升级发生时。 0设置为时locks,当当前锁结构使用的内存达到数据库引擎内存池的 40% 时,会发生锁升级。 如果未 locks 设置为 0,则当锁数达到指定 locks值的 40% 时,会发生锁升级。

权限

默认情况下,所有用户都具备不带参数或仅带第一个参数的 sp_configure 的执行权限。 若要使用两个参数执行 sp_configure 来更改配置选项或运行 RECONFIGURE 语句,用户必须拥有 ALTER SETTINGS 服务器级别权限。 ALTER SETTINGS 权限由 sysadmin 和 serveradmin 固定服务器角色隐式拥有。

使用 SQL Server Management Studio

  1. 在对象资源管理器中,右键单击服务器并选择 “属性”

  2. 选择“高级”节点。

  3. 在“并行度”下,键入选项所需的值locks

    使用 locks 此选项可设置可用锁的最大数目,这会限制 SQL Server 对其使用的内存量。

使用 Transact-SQL

  1. 连接到 数据库引擎。

  2. 在标准栏上,选择“新建查询”。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 此示例说明如何使用 sp_configure 设置 locks 选项的值,将所有用户可用的锁数设置为 20000

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'locks', 20000;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

有关详细信息,请参阅服务器配置选项

跟进:配置锁定选项后

必须重新启动服务器,设置才会生效。