小编And*_*y W的帖子

为什么查询会导致溢出到 tempdb?

背景

我正在将 160gb 数据库从具有 48gb RAM 的 Win 2008 服务器上的 MSSQL 2008(标准)迁移到在具有 64gb RAM 的 Win 2012 上运行 MSSQL 2012(64 位网络版)的新服务器。旧服务器处于活动状态且负载不足;新服务器不在生产中。新服务器有 8 个 tempdb 文件(每个 4GB)。

问题

在新服务器上进行测试时,我看到许多查询中的步骤导致提到“操作员使用 tempdb 在执行期间溢出数据”的警报。我已经能够通过重写一些查询来避免排序,但这并没有真正解决这个问题。旧服务器上的相同查询不会导致溢出。我读过当 MSSQL 无法在内存中完成操作并且必须溢出/分页到 tempdb 时会发生溢出。我应该担心溢出吗?

例子

在此处输入图片说明

我已经在数据库上运行了 sp_updatestats,所以统计信息应该是最新的,但是您会注意到估计的行数和实际的行数之间存在一些差异。

内存问题

我为 64gb 中的 58 个 MSSQL 设置了最大内存设置。目前 MSSQL 已经消耗了大约 35gb 的内存,但工作集只有 682mb。旧服务器(尽管在生产中,处理负载)有 44gb 的内存提交给 MSSQL,其中 43.5gb 在其工作集中。

在此处输入图片说明

我不知道溢出是否与内存设置有关-有人有任何想法吗?MSSQL 目前有大量 RAM 可用,那么为什么它会溢出到 tempdb 以进行某些排序和哈希匹配?

sql-server sql-server-2012

27
推荐指数
1
解决办法
2万
查看次数

为什么 SQL Server 2012 工作集内存低?

我最近为一个繁忙的网站迁移了一个 100GB 的数据库:

MS SQL 2008 Standard Edition R2
Windows Server 2008
48gb RAM
Run Code Online (Sandbox Code Playgroud)

MS SQL 2012 Web Edition
Windows Server 2012
64gb RAM
Run Code Online (Sandbox Code Playgroud)

我注意到 2012 年的内存使用情况似乎有所不同,与2008 年服务器相比,工作集内存相对较低(请参见下面的屏幕截图)。

这看起来正确吗,我应该担心吗?我想确保 MSSQL 可以根据需要访问尽可能多的内存。两台服务器的使用配置文件,就来自它们所支持的网站的请求而言,是相同的,因此查询的模式或数量没有改变。

SQL Server 2008 在此处输入图片说明

SQL Server 2012 在此处输入图片说明

SQL Server 2008 内存设置 在此处输入图片说明

SQL Server 2012 内存设置 在此处输入图片说明

感谢您提供任何提示。

sql-server memory sql-server-2012

4
推荐指数
1
解决办法
7961
查看次数

标签 统计

sql-server ×2

sql-server-2012 ×2

memory ×1