我从鲍勃·多尔(Bob Dorr)那里得到了关于SQL Server 2012中最大服务器内存控制的定义。您也可以阅读联机丛书以获取更多详细信息
服务器的最大内存控制SQL Server的内存分配,包括缓冲池,编译内存,所有缓存,qe内存授予,锁管理器内存和CLR内存(基本上是dm_os_memory_clerks中的任何“职员”)。线程堆栈,内存堆,除SQL Server之外的链接服务器提供程序的内存,或由“非SQL Server” DLL分配的任何内存均不受最大服务器内存的控制。
分配给线程堆栈的内存,第三方DLL,除Microsoft以外的链接服务器提供程序(如MySQL.PostgreSQL等)或在SQL Server地址空间中加载的非SQL Server的任何DLL被分配在最大服务器内存之外。SQL Server 2012中的IIRC备份操作仍在缓冲池之外分配了内存。
您是否正在使用链接服务器查询其他RDBMS?同一Windows机器上安装的任何其他软件。您能否在某些共享位置发布以下查询的输出
select type,
sum(pages_kb)/1024 as [Memory utilized in MB],
sum(awe_allocated_kb)/1024 as [Memory allocated though Windows API]
from sys.dm_os_memory_clerks
group by type
order by [Memory utilized in MB] desc
Go
-------
select (virtual_address_space_committed_kb/1024) as virtual_address_space_committed_MB,
(locked_page_allocations_kb/1024) locked_page_allocations_MB,
(pages_kb/1024) [memory allocated MB]
from sys.dm_os_memory_nodes
Go
-------
SELECT SUM (pages_in_bytes)/1024 as 'KB Used', type
FROM sys.dm_os_memory_objects
GROUP BY type
ORDER BY 'KB Used' DESC;
GO
--------
select name,
type,
sum(pages_kb)/1024 as [Mem MB],
sum(entries_count) as [Total Entry count] from sys.dm_os_memory_cache_counters
group by
type, name
order by [Mem MB] desc
Go
-----
select * from sys.dm_os_loaded_modules where company <> 'Microsoft Corporation'
go
您还可以将完整的DBCC MMEMORYSTATUS
输出上传到某个共享位置并在此处发布链接吗?这将有助于了解哪些组件正在占用内存
编辑:根据dbcc memorystatus输出,我可以看到2个NUMA节点,每个节点使用的内存约为
Node 1 : VM Committed 33554380
Node 2: VM Committed 33554420
Total is approx 64 G.
再次,如果您在memorystatus中看到Memory Manager输出
Memory Manager KB
---------------------------------------- -----------
VM Reserved 260726964
VM Committed **67108820**
提交的VM实际上是SQL Server提交的虚拟内存,并且由于已提交了此内存physical memory backing it
。再次使我觉得SQL Server使用的最大服务器内存设置为65 G
这是最大的服务器内存。因此,内存可以在两个节点之间很好地分配,也可以添加以下查询语句的输出进行检查。请添加屏幕截图
SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB]
FROM sys.dm_os_process_memory;
GO
SELECT TOP (20) * FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;
?