返回顶部
首页 > 资讯 > 数据库 >SQLServer因为OS虚拟内存不足而hang住异常解决-锁定内存页 (LPIM)
  • 637
分享到

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

2024-04-02 19:04:59 637人浏览 安东尼
摘要

异常: DB: SQL Server2012SP3 OS: windows2012 一线工程师反应系统访问DB突然卡住了,DBA登录DB检查sqlServer发现DB无法登录,之前SMSS已经连接的se

异常:

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 来使用“锁定页”。

您可能感兴趣的文档:

--结束END--

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

本文链接: https://lsjlt.com/news/49245.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作