千家信息网

SQLServer因为OS虚拟内存不足而hang住异常解决-锁定内存页 (LPIM)

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,异常:DB: SQL Server2012SP3OS: Windows2012一线工程师反应系统访问DB突然卡住了,DBA登录DB检查SQLServer发现DB无法登录,之前SMSS已经连接的sess
千家信息网最后更新 2026年11月02日SQLServer因为OS虚拟内存不足而hang住异常解决-锁定内存页 (LPIM)

异常:

DB: SQL Server2012SP3

OS: Windows2012

一线工程师反应系统访问DB突然卡住了,DBA登录DB检查SQLServer发现DB无法登录,之前SMSS已经连接的session中无法执行任何SQL。服务器CPU使用10%,memory使用达到了99%以上。过了十分钟系统memory自己降低到了90%以下,DB可以访问。

分析:

检查SQLServer error log:

只是在一异常时间段有stack dump的记录,但没有太多有价值的信息

检查windows性能计数器:

异常时间段OS memory确实耗尽

检查windows log:

有虚拟内存不够警告,

sqlserver.exe进程使用28GB(DBA设定的DB最大内存使用量),dllhost.exe进程使用12GB

正好把服务器的32GB+虚拟内存设定的8GB占满!所以报错内存不足!!


解决:

上述dllhost.exe进程使用12GB一定存在问题,此块可能系统层面补丁或病毒相关,已交给系统工程师分析。

但是否有办法在OS内存不足时,DBA通过设定可以不影响到SQL server的正常运行呢?

答案是有的,软微官方提供锁定内存页 (LPIM) 解决方法,通过Windows 策略将确定哪些帐户可以使用进程将数据保留在物理内存中,从而阻止系统将数据分页到磁盘的虚拟内存中。这样即使OS内存不足时对SQL server的影响也会是最小了。

设定:

cmd->gpedit.msc->local computer policy->computer configuration->windows settings->security settings->local policies->user rights assignment-> Lock pages memory中加入添加 SQL Server 启动帐户

至此,锁定内存页 (LPIM)设置完成。

再持续观察一段时间,系统再没有发生系统内存不足SQLServer hang住问题。

------------------------------------------------------------ ------------------------------------------

以下附,软微官方文档说明:

https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-ver15

锁定内存页 (LPIM)

此 Windows 策略将确定哪些帐户可以使用进程将数据保留在物理内存中,从而阻止系统将数据分页到磁盘的虚拟内存中。 锁定内存中的页可以在发生将内存分页到磁盘时保持服务器的响应能力。 已向有权运行 sqlservr.exe 的帐户授予 Windows 锁定内存页 (LPIM) 用户权限时,在 SQL Server Standard Edition 和更高版本的实例中将"锁定内存页" 选项设置为"打开" 。

若要对 SQL Server 禁用"锁定内存页"选项,请为有权运行 sqlservr.exe( SQL Server 启动帐户)启动帐户的帐户删除"锁定内存页"用户权限 。

设置此选项可实现根据其他内存分配器的请求扩大或缩小内存,不影响 SQL Server 动态内存管理。 使用"锁定内存页"用户权限时,建议按 如上所述,为 max server memory 设置一个上限 。

重要

应仅在必要时设置此选项,即有迹象表明正在换出 sqlservr 进程时。在这种情况下,错误日志将报告错误 17890,类似于以下示例: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%. 从 SQL Server 2012 (11.x) 开始,Standard Edition 不需要 跟踪标志 845 来使用"锁定页"。

启用"锁定内存页"

启用"锁定内存页"选项:

  1. 在 "开始" 菜单上,单击 "运行" 。 在"打开" 框中,键入 gpedit.msc

    将打开 "组策略" 对话框。

  2. 在 "组策略" 控制台上,展开 "计算机配置" ,再展开 "Windows 设置" 。

  3. 展开 "安全设置" ,再展开 "本地策略" 。

  4. 选择 "用户权利指派" 文件夹。

    细节窗格中随即显示出策略。

  5. 在该窗格中,双击"锁定内存页" 。

  6. 在"本地安全策略设置"对话框中,添加有权运行 sqlservr.exe ( SQL Server 启动帐户)的帐户 。

内存 帐户 系统 策略 进程 运行 数据 用户 检查 时间 服务器 权限 磁盘 影响 服务 安全 官方 对话框 工程 工程师 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 涨乐互联网科技 上海万想互联网科技 太原新华互联网科技学校怎么样 宁夏众和广鑫互联网科技有限公司 上海宁丞科技互联网 坤平互联网科技 互联网科技扶贫时间 本届互联网博览会上的黑科技 允成互联网科技有限公司融资 佛山市翊博互联网络科技有限公司 互联网行业科技股 翼展科技 首家互联网医院 阿里互联网科技企业 徐州市互联网科技有限公司 高科技互联网套路 互联网与数字科技关系 广西科技产业互联网是什么 广西泛欧互联网科技有限公司 互联网科技博主张洲 银川新华互联网科技学校招聘 广州大一互联网络科技有限公司 互联网科技工作委员会主任 中国互联网科技工作委员会毛军 互联网科技logo设计 重庆科技学院互联网 茂名市互联网科技产业园 互联网金融科技公司干啥的 宜昌元轩互联网科技有限公司 广州千川互联网科技有限公司 山东大美朱楼互联网科技有限公司
0