当前位置: 首页 > 科技观察

SQLServer什么时候启用“锁定内存页”选项(Windows)

时间:2023-03-20 21:05:40 科技观察

本文转载自微信公众号《DBA的杂想》,作者潇湘隐士。转载本文请联系DBA杂念公众号。在SQLServer的配置中,尤其是应用服务器和数据库服务器共享/混合时,最好启用“锁定内存页”选项。相反,对于单独的SQLServer数据库服务器,此选项不是必需的。我最近遇到了这样一个案例。项目的SQLServer数据库和IIS应用部署在同一台服务器上。当时Zabbix监控已经出现了服务器的CPU告警和SwapUsage告警。。。登录服务器查看后来发现IISWorkerProcess进程占用了大量CPU资源并且消耗了12.5GB内存(服务器一共16G内存)。由于IIS内存泄漏,SQLServer没有启用“Lockmemorypage”选项,即使设置了Maximumservermemory,也会导致SQLServer的内存不断被占用,系统不断替换数据由SQLServer进程使用到虚拟内存中。如下截图所示,SQLServer性能严重下降,甚至连不上。查看SQLServer的日志信息,会看到很多这样的错误信息:Asignificantpartofsqlserverprocessmemoryhasbeenpagedout。这可能会导致性能下降。持续时间:1846秒。Workingset(KB):1457444,committed(KB):10213768,memoryutilization:xx%如果在SQLServer中启用“Lockmemorypage”选项,则不会出现这种情况,也不会出现性能和连接问题,因为内存换出(页出)。下面简单介绍一下SQLServer服务器“锁定内存页”的简单知识。以下内容摘自官方文档[1]。官方文档中的部分内容,中文翻译相当糟糕,我个人更正了晦涩或翻译不当的地方。所以以下内容与官方文档略有不同。请知悉。SQLServer启用“在内存中锁定页面”选项适用于:SQLServer(所有受支持的版本)此Windows策略确定哪些帐户的进程可以将数据保留在物理内存中,防止系统将内存中的数据交换出内存(页面out)到磁盘上的虚拟内存中。备注当内存中的页面预期被调出到磁盘时,锁定内存中的页面可以极大地提高性能。可以使用Windows组策略工具(gpedit.msc)为SQLServer的启动帐户启用此策略。您必须是系统管理员才能更改此策略。启用“在内存中锁定页面”选项在“开始”菜单上,单击“运行”。在“打开”框中,键入gpedit.msc在“本地组策略编辑器”控制台上,展开“计算机配置”,然后展开“Windows设置”。展开安全设置,然后展开本地策略。选择用户权限分配文件夹。该策略显示在详细信息窗格中。在此窗格中,双击内存中的锁定页面。在“本地安全设置-锁定内存中的页面”对话框中,单击“添加用户或组”。在“选择用户、服务帐户或组”对话框中,选择并勾选运行sqlservr.exe的帐户(SQLServer启动帐户)。重新启动SQLServer服务以使此设置生效。内存中的锁定页面(LPIM)此Windows策略将确定哪些帐户的进程可以将其使用的数据保留在物理内存中,以防止系统将内存中的页面交换出内存(pageout)到磁盘上的虚拟内存中。锁定内存页面可保持服务器响应,同时将内存页面从内存交换到磁盘。在向运行sqlservr.exe的启动帐户授予Windows内存中锁定页面(LPIM)用户权限时,在SQLServerStandardEdition和更高版本的实例中将内存中的锁定页面选项设置为开。要为SQLServer禁用“在内存中锁定页面”选项,请从运行sqlservr.exe的启动帐户(SQLServer启动帐户)中删除“在内存中锁定页面”用户权限。设置该选项可以根据其他内存分配器的请求扩充或缩减内存,而不影响SQLServer的动态内存管理。使用“内存中的锁定页面”用户权限时,建议如上所述设置最大服务器内存的上限。重要仅当有迹象表明sqlservr进程的数据正在换出时,才应在必要时设置此选项。在这种情况下,错误日志会报错17890,类似下面的例子:Asignificantpartofsqlserverprocessmemoryhasbeenpagedout。这可能会导致性能下降。持续时间:####秒。工作集(KB):####,已提交(KB):####,内存利用率:##%。从SQLServer2012(11.x)开始,标准版不需要启用跟踪标志845来使用“锁定页面”。参考文献[1]Lockingpagesinmemory(LPIM):https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/enable-the-lock-pages-in-memory-option-windows?view=sql-server-ver15