我有一个 SQL Server 2012 SP2 企业版的实例,它消耗的内存比最大值高约 20GB。内存限制。实例限制为 65GB,但以下查询中使用的物理内存显示为 86GB
SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB]
FROM sys.dm_os_process_memory;
GO
Run Code Online (Sandbox Code Playgroud)
服务器是具有 2 个 NUMA 节点的物理服务器。有没有一种方法可以找出正在消耗缓冲池之外的内存的东西(我假设这就是正在发生的事情)?
这是 DBCC MEMORYSTATUS 的输出:-

这是设置的内存限制:-

提前致谢。
更新:-我已经运行了 Aaron 建议的查询
SELECT TOP (20) * FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC
Run Code Online (Sandbox Code Playgroud)
这是输出:-

pages_kb 的总和达到 ~60GB
更新 2:- DBCC MEMORYSTATUS 的完整输出在这里:- http://pastebin.com/nGn6kXEc
更新 3:- 此处在 excel 文件中输出 Shanky 的脚本:- http://jmp.sh/LKRlH4K
更新 4:- 输出的屏幕截图:-
SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB]
FROM sys.dm_os_process_memory;
GO
Run Code Online (Sandbox Code Playgroud)

所以这似乎表明 SQL Server 正在使用超过 65GB 的设置。
我对分区时表的物理布局有几个问题。我一直在研究这个,但仍然有点不确定。
假设我有一个现有的表:-
CREATE TABLE dbo.[ExampleTable]
(ID INT IDENTITY(1,1),
Col1 SYSNAME,
Col2 SYSNAME,
CreatedDATE DATE) ON [DATA];
ALTER TABLE dbo.[ExampleData] ADD CONSTRAINT [PK_ExampleTable] PRIMARY KEY CLUSTERED
( [ID] ASC )
GO
Run Code Online (Sandbox Code Playgroud)
我想在 CreatedDate 列上对该表进行分区(本示例中所有分区在同一文件组中),但我不能将该列作为主键。所以我将 CreatedDate 列添加到主键:-
ALTER TABLE dbo.[ExampleTable] DROP CONSTRAINT PRIMARY KEY
ALTER TABLE dbo.[ExampleTable] ADD CONSTRAINT [PK_ExampleTable] PRIMARY KEY CLUSTERED
( [ID] ASC, [CreatedDate] ASC ) ON PartitionScheme(CreatedDate)
GO
Run Code Online (Sandbox Code Playgroud)
我的问题是数据将如何排序?数据是否会按 CreatedDate 列物理拆分为分区,然后按 ID 列排序?或者分区是否符合逻辑并且数据仍然按 ID 列排序?
另外,如果 ID 列是 GUID 会发生什么?数据是否会在分区中然后在这些分区中严重碎片化?
任何建议将不胜感激,谢谢。
安德鲁
编辑:- 添加分区方案和功能:-
DECLARE @CurrentDate DATETIME;
CREATE …Run Code Online (Sandbox Code Playgroud) performance sql-server primary-key partitioning query-performance