我试图找出一种方法(只使用TSQL)来确定是否使用PAGEFILE,以及使用了多少PAGEFILE(如果从现在起引用windows页面文件,我将用这个术语大写--类似于页面使用%计数器)。
我的第一个想法是使用sys.dm_os_sys_memory。我在这里有点困惑。total_page_file_kb的描述是这是一个提交限制,所以基本上是物理内存(RAM)的大小+ PAGEFILE的大小。到目前为止还可以。但是available_page_file_kb到底是什么呢?它是指提交限制还是指PAGEFILE?我试着用这些计算:
假设available_page_file_kb引用提交限制:
PAGEFILE使用率%= (available_page_file_kb-available_physical_memory_kb) /(总_页_文件_kb-总_物理_内存_kb)
假设available_page_file_kb指的是PAGEFILE
PAGEFILE使用率%= (available_page_file_kb) /(总_页_file_kb-总计_物理_内存_kb)
不幸的是,这些计算都没有给我正确的结果。我一直在我的一些测试服务器上检查页面回收器%计数器,有时第一个公式错误仅为1-3%,第二个公式错误为15-25%,反之亦然,第二个公式为1-3%,第一个公式错误为15-25%,
我错过了什么?这是不可能确定(甚至只是得到一个密切的估计)分页率%与sys.dm_os_sys_memory dmv?
发布于 2017-08-30 10:27:21
是否需要考虑系统缓存和内核内存页?
如果你在你的问题中添加了你的服务器上的一些实际数字和你期望的内容,这会有很大的帮助。
例如,下面是测试服务器的内存状态:

守则是:
SELECT 'Page File' AS MemoryType
,CONVERT(DECIMAL(10, 2), 1.0 * total_page_file_kb / 1024) AS Total_MB
,CONVERT(DECIMAL(10, 2), 1.0 * available_page_file_kb / 1024) AS Free_MB
,CONVERT(VARCHAR(5), CONVERT(DECIMAL(10, 1),
100.0 * available_page_file_kb / total_page_file_kb)) + '%' AS Free
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'Physical (RAM)'
,CONVERT(DECIMAL(10, 2), 1.0 * total_physical_memory_kb / 1024)
,CONVERT(DECIMAL(10, 2), 1.0 * available_physical_memory_kb / 1024)
,CONVERT(VARCHAR(5), CONVERT(DECIMAL(10, 1),
100.0 * available_physical_memory_kb / total_physical_memory_kb)) + '%'
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'Non-Physical'
,CONVERT(DECIMAL(10, 2),
1.0 * (total_page_file_kb - total_physical_memory_kb) / 1024)
,CONVERT(DECIMAL(10, 2),
1.0 * (available_page_file_kb - available_physical_memory_kb) / 1024)
,CONVERT(VARCHAR(5), CONVERT(DECIMAL(10, 1),
100.0 * (available_page_file_kb - available_physical_memory_kb)
/ (total_page_file_kb - total_physical_memory_kb))) + '%'
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'System Cache',CONVERT(DECIMAL(10, 2), 1.0 * system_cache_kb / 1024),NULL,NULL
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'Kernel: Paged'
,CONVERT(DECIMAL(10, 2), 1.0 * kernel_paged_pool_kb / 1024),NULL,NULL
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'Kernel: Non-Paged'
,CONVERT(DECIMAL(10, 2), 1.0 * kernel_nonpaged_pool_kb / 1024),NULL,NULL
FROM sys.dm_os_sys_memory
ORDER BY Total_MB DESChttps://dba.stackexchange.com/questions/96188
复制相似问题