[翻译]SQL Server 工作集消息

Q:我发现有指向工作集(SQL Server保留内存区域)被分页出来相关的消息:
重要部分的 SQL 服务器进程内存已被分页。这可能导致性能下降。持续时间: 0 秒。 工作集 (KB): 2484,已提交 (KB): 48036,内存使用比率: 50%。
有什么原因可能导致这个问题?

A:
工作集调整分为以下几种:
1. 信号调整
低物理内存事件提醒事件是由操作系统设置的(参考:QueryMemoryResourceNotification<http://msdn2.microsoft.com/en-us/library/aa366799.aspx>),当物理内存低下时会出现。SQL Server资源监视器,Lazy writer和其他进程占用BPool内存部分。它会将物理内存返回给系统,然后降低SQL Server的工作集。当该事件产生时,sys.dm_os_ring_buffer和RING_BUFFER_RESOURCE_MONITOR的记录会被写入日志。这是SQL Server要保留预留内存的正常行为。该行为不会被写入错误日志信息。

2. 自调整
操作系统在新申请一个页的时候遇到了页错误,判断为物理内存不足。例如,如果SQL Server为一个栈,连接服务器或其他应用程序申请页,发现内存不足,会直接调整SQL Server的工作集。

3. 硬调整
当系统内存严重不足的时候,会发生硬调整。该行为会直接把SQL Server所有的工作集和其他进程分页出来。

除了信号调整之外,自调整和硬调整都会写错误日志,导致性能问题。

基本查错步骤:
1. 确认没有其他进程快速吃完了内存。查看方法是监测内存:_Total工作集这个性能计数器。如果您启用了一个快速消耗内存的应用程序,工作集会被快速地调整,但_Total会保持不变。如果_Total快速下降,那么这就说明不是某个应用程序吃光了内存,而是发生了MiEmptyWorkingSet或MmAllocateContigiousMemory发生了,然后操作系统决定进行硬调整。

2. 确认SQL Server进程ID在发生问题的时间段一直存在。如果SQL Server服务有被重启过计数器可能会产生容易误导的数据。

3. 确认您的系统的驱动是最新的。驱动也可能会造成调整。

4. 确认操作系统终端服务的bug不是导致该问题的原因:http://support.microsoft.com/default.aspx?scid=kb;EN-US;905865

5. 抓取完整的性能计数器,和SQL Server的sys.dm_os_ring_buffers。

6. 应用操作系统补丁:http://support.microsoft.com/default.aspx?scid=kb;EN-US;920739

7. 应用操作系统补丁:http://support.microsoft.com/default.aspx?scid=kb;EN-US;931308

8. 应用SQL Server 2005 SP3。

原文地址:https://www.cnblogs.com/galaxyyao/p/1459611.html