监视内存使用量

定期监视 SQL Server 的实例以确认内存使用量在正常范围内。

若要监视内存不足的情况,请使用下列对象计数器:

  • 内存:Available Bytes

  • 内存:Pages/sec

Available Bytes 计数器指示当前有多少内存(以字节为单位)可供进程使用。 Pages/sec 计数器指示由于页错误而从磁盘取回的页数,或由于页错误而写入磁盘以释放工作集空间的页数。

Available Bytes 计数器的值低表示计算机总内存不足或应用程序没有释放内存。 Pages/sec 计数器的比率高表示分页过多。 监视 Memory: Page Faults/sec 计数器可以确保磁盘活动不是由分页导致的。

分页率偏低(以及由此产生的页错误)是正常的,即使计算机有大量的可用内存。 Microsoft Windows 虚拟内存管理器 (VMM) 在剪裁 SQL Server 和其他进程的工作集大小时会收走这些进程的页。 此 VMM 活动会导致页错误。 要确定分页过多是由 SQL Server 还是由其他进程导致,请监视进程:Page Faults/sec 计数器(针对 SQL Server 进程实例)。

有关解决分页过多的详细信息,请参阅 Windows 操作系统文档。

隔离 SQL Server 所用的内存

默认情况下,SQL Server 将根据可用系统资源动态改变其内存要求。 如果 SQL Server 需要更多内存,它会查询操作系统以确定是否有可用的空闲物理内存,然后使用可用内存。 如果 SQL Server 当前不需要分配给它的内存,它会将内存释放给操作系统。 但是,您可以覆盖此选项通过 min server memorymax server memory 服务器配置选项来动态使用内存。 有关详细信息,请参阅服务器内存选项

若要监视 SQL Server 使用的内存量,请检查下列性能计数器:

  • 进程:Working Set

  • SQL Server:缓冲区管理器:缓冲区缓存命中率

  • SQL Server:缓冲区管理器:数据库页

  • SQL Server:内存管理器:Total Server Memory (KB)

Working Set 计数器显示进程所用的内存量。 如果此内存量一直小于 min server memorymax server memory 服务器选项设置的内存量,则 SQL Server 被配置为使用过多内存。

Buffer Cache Hit Ratio 计数器仅适用于应用程序。 但是,90% 或更高的命中率是令人满意的。 添加更多内存,直到该值始终大于 90%。 大于 90% 的值表示数据缓存满足所有数据请求中 90% 以上的请求。

如果 Total Server Memory (KB) 计数器值相对于计算机的物理内存量而言一直很高,则可能表示需要更多内存。

确定当前内存分配

以下查询返回有关当前分配内存的信息。

SELECT
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory;