我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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的记录,但没有太多有价值的信息 SQLServer因为OS虚拟内存不足而hang住异常解决-锁定内存页 (LPIM)

检查windows性能计数器:

异常时间段OS memory确实耗尽 SQLServer因为OS虚拟内存不足而hang住异常解决-锁定内存页 (LPIM)

检查windows log:

有虚拟内存不够警告,

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

正好把服务器的32GB+虚拟内存设定的8GB占满!所以报错内存不足!! SQLServer因为OS虚拟内存不足而hang住异常解决-锁定内存页 (LPIM)


解决:

上述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 启动帐户 SQLServer因为OS虚拟内存不足而hang住异常解决-锁定内存页 (LPIM)

至此,锁定内存页 (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 来使用“锁定页”。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录