4.非缓冲池内存分布
  SELECT M.type,
  SUM(M.virtual_memory_reserved_kb) AS VirtualMemoryReservedKB,
  SUM(M.virtual_memory_committed_kb) AS VirtualMemortCommitedKB,
  SUM(M.shared_memory_committed_kb) AS SharedMemroyCommittedKB,
  SUM(M.shared_memory_reserved_kb) AS SharedMemroyReservedKB,
  SUM(M.multi_pages_kb) AS MultiPagesKB,
  SUM(M.single_pages_kb) AS SinglePagesKB,
  SUM(M.multi_pages_kb)+SUM(M.single_pages_kb) AS TotalPagesKB
  FROM sys.dm_os_memory_clerks M
  GROUP BY M.type
  ORDER BY TotalPagesKB DESC
  已经按照内存使用排序,找到使用内存多的部分。分析使用的原因,并解决。

  案例
  某客户的客户系统使用缓慢,通过上面的排除方法依次排查,后找到是非缓冲池部分的 MEMORYCLERK_SQLOPTIMIZER占用内存太多造成
  解决
sp_configure N'show advanced options',1
GO
reconfigure
GO
sp_configure N'optimize for ad hoc workloads',1
GO
sp_configure N'show advanced options',1
GO
reconfigure
GO
  开启上面的选项后,内存仍然没有自动释放。重启SQL SERVER 服务,释放掉已经使用掉的内存。