SQL Server在Windows 11上需授予服务账户“锁定内存页”权限并重启服务,方可防止关键数据页被换出,从而缓解内存不足、缓冲池抖动及页生命周期缩短问题。

当 SQL Server 在 Windows 11 上运行大型数据库负载时,频繁遭遇“内存不足”错误、缓冲池抖动加剧、页生命周期异常缩短,说明系统默认未授予其锁定物理内存页的权限——该特权可防止关键数据页被 Windows 内存管理器换出到分页文件,直接提升查询响应与事务吞吐。
确认当前账户已加入性能监视器用户组
SQL Server 服务账户必须属于 Performance Monitor Users 组,否则后续策略分配无效。打开“计算机管理→系统工具→本地用户和组→组”,双击 Performance Monitor Users,在成员列表中检查 SQL Server 实际运行账户(如 NT Service\MSSQLSERVER 或自定义域账户)是否在列。若无,请点击“添加”并精确输入账户全名,注意大小写与反斜杠方向。
通过本地安全策略启用“锁定内存页”权限
方法一:图形界面操作(推荐首次配置)
1、按下 Win + R,输入 secpol.msc 并回车,以管理员身份打开本地安全策略。
2、依次展开“本地策略→用户权利指派”。
3、在右侧列表中双击“锁定内存页”。
4、点击“添加用户或组”,在弹出窗口中输入 SQL Server 服务账户名(例如 NT SERVICE\MSSQLSERVER),点击“检查名称”确保解析成功,再点“确定”。
【必须点击“检查名称”验证账户格式,输错或未解析会导致策略不生效】
5、关闭所有策略窗口,无需重启策略服务。
方法二:命令行批量配置(适合多实例环境)
1、以管理员身份运行 Windows Terminal。
2、执行以下命令(将 NT SERVICE\MSSQLSERVER 替换为你的实际服务账户):whoami /user → 确认当前终端具备管理员令牌secedit /export /cfg C:\temp\pol.inf /areas USER_RIGHTSecho [Privilege Rights] >> C:\temp\pol.infecho SeLockMemoryPrivilege = "NT SERVICE\MSSQLSERVER" >> C:\temp\pol.infsecedit /configure /db secedit.sdb /cfg C:\temp\pol.inf /areas USER_RIGHTS
重启 SQL Server 服务使权限生效
1、按 Ctrl + Shift + Esc 打开任务管理器 → 切换到“服务”选项卡。
2、找到对应 SQL Server 实例服务(如 MSSQLSERVER 或 SQLEXPRESS)。
3、右键 → “重新启动”。
4、等待状态变为“正在运行”,立即打开 SQL Server Management Studio 连接该实例。
5、执行 T-SQL:SELECT value_in_use FROM sys.configurations WHERE name = 'show advanced options';
若返回 0,先执行:sp_configure 'show advanced options', 1; RECONFIGURE;
再执行:sp_configure 'awe enabled', 1; RECONFIGURE;
【Windows 11 不再支持 AWE,此步仅用于触发内存锁定机制校验;实际生效靠 OS 层权限,而非 SQL 配置】
验证锁定内存页是否真正启用
第一步:检查 Windows 事件日志
打开“事件查看器→Windows 日志→系统”,筛选来源为“Microsoft-Windows-Resource-Exhaustion-Detector”,查找含“LockPagesInMemory”关键词的警告事件。若无相关拒绝记录,说明权限已加载成功。
第二步:运行 PowerShell 检测
以管理员身份运行:$proc = Get-Process -Id (Get-WmiObject Win32_Service | Where-Object {$_.Name -eq "MSSQLSERVER"}).ProcessId -ErrorAction SilentlyContinue$proc | Select-Object Name, @{Name="LockedPages";Expression={$_.PrivateMemorySize64 / 1MB}}
观察输出中 LockedPages 值是否随负载增长而稳定上升,而非剧烈波动。
第三步:SQL Server 内部确认
执行:DBCC MEMORYSTATUS;
在结果集中查找“Locked Pages Alloc”行,数值应大于 0 且持续增长,表明物理内存页已被成功锁定。


















