背景
我正在将160gb数据库从具有48gb RAM的Win 2008服务器上的MSSQL 2008(标准)迁移到具有64gb RAM的Win 2012上运行MSSQL 2012(64位网络版)的新服务器上。旧服务器处于活动状态并处于负载状态;新服务器未投入生产。新服务器具有8个tempdb文件(每个4GB)。
问题
在新服务器上进行测试时,我看到许多查询中的步骤引起警报,提示“操作员在执行过程中使用tempdb溢出数据”。我已经能够通过重写一些查询来避免排序,但这并不能真正解决问题。旧服务器上的相同查询不会引起溢出。我读过,当MSSQL无法完成内存中的操作并不得不溢出/分页到tempdb中时,就会发生溢出。我应该担心泄漏吗?
例子
我已经在数据库上运行了sp_updatestats,因此统计信息应该是最新的,但是您会注意到估计的行数与实际的行数之间存在一些差异。
内存问题
我已为64GB的MSSQL设置了最大内存设置。当前,MSSQL已消耗了大约35gb的内存,但是工作集只有682mb。旧服务器(尽管在生产中,正在处理负载)具有44gb的内存分配给MSSQL,其中43.5gb在其工作集中。
我不知道泄漏是否与记忆设置有关-任何人有任何想法吗?MSSQL当前有英亩的可用内存,那么为什么它会因某种排序和散列匹配而溢出到tempdb中?