SQL服务器内存调查

时间:2017-02-02 07:49:47

标签: sql-server memory-management

我正在调查SQL server 2012的内存使用情况。我运行了以下查询

SELECT c.counter_name, c.cntr_value / 1000 AS 'Memory (Mb)'
FROM sys.dm_os_performance_counters c
WHERE c.counter_name IN ('Free Memory (KB)', 'Total Server Memory (KB)', 'Target Server Memory (KB)');

SELECT DB_NAME(database_id) AS 'Database', COUNT(*) * 8 / 1024 AS MBUsed
FROM sys.dm_os_buffer_descriptors
GROUP BY database_id
ORDER BY COUNT(*) * 8 / 1024 DESC

结果如下:

=========================================
counter_name                Memory (Mb)
=========================================
Free Memory (KB)            5453
Target Server Memory (KB)   28311
Total Server Memory (KB)    24303

=========================================
Database                MBUsed
=========================================
DB1                     7369
DB2                     3924
tempdb                  386
WSS_UsageApplication    244
SharePoint_Config       107
DB3                     95

从第一个查询中你可以看到我已经分配了SQL最大内存使用的是28311 Mb并且它告诉我来自同一查询的当前总使用量是24303 Mb。但是,当我运行第二个查询以了解更多详细信息数据库使用的24303 Mb是什么时,在查询的所有值之后,它们不会添加到24303 Mb甚至也不接近。

那我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

您可以通过以下查询获得职员的SQL Server内存摘要以及总数:

SELECT type, SUM(pages_kb)*1024 AS bytes
FROM sys.dm_os_memory_clerks
GROUP BY ROLLUP(type);