SQL Server的内存一直上不去从Task Schedule中看到SQL Server只使用了MB内存实际这台机器有GB的内存可用内存有超过GB
当时我以为是开启了AWE导致的所以连接到他的服务器看了一下但是数据库为企业版位所以不用开启AWE而且即使开启了也会被忽略
使用下面的脚本查询了一下SQL Server内存使用
select physical_memory_in_use_kblocked_page_allocations_kb*fromsysdm_os_process_memory
看到实际使用的内存有GB远远超出任务管理器看到的(也可以通过Perfmon的Total server memory(MB)查看)
当时觉得很奇怪查看了SQL Server错误日志发现了类似下面的信息
:: Server Large Page Extensions enabled
:: Server Large Page Granularity:
:: Server Large Page Allocated: MB
猜测这台期间开启了Lock Pages In memory功能之后得到确认因为开启Lock Pages In memory之后SQL Server会使用AWE APIs锁定内存页所以这部分的内存使用不会显示在Working Set中
So in summary the AWE APIs for bit and bit SQL Server systems are used for different purposes In bit it is really to extend memory access beyond Gb or to enable the AWE feature For bit systems it is to possibly gain performance and to “lock pages” for the buffer pool
到现在这个问题就比较明朗了其实SQL Server还是正常工作的一般查询SQL Server的使用还是建议使用DMV或者Perfmon直接查看Working Set信息可能不准
另外说一下当时看到上面Large Page的信息以为是数据库开启了LargePage但是使用DBCC TRACSTATUS查看没有开启 Trace Flag所以大数据功能是没有启用的只有开启 Trace Flag数据库才会真正启用Large Page
启用Large page在数据库错误日志会看到类似信息
:: Server Using large pages for buffer pool
关于Lock Pages In memory/working set机制我找到了两篇文章大家有兴趣可以参考
Funwith Locked Pages AWE Task Manager and the Working Set
WhySQL Server is using so LESS memory