内存增加,性能更差

Der*_*omm 9 sql-server memory sql-server-2008-r2

设置:

  • 视窗服务器 2008 R2
  • SQL Server 2008 R2 SP1
  • 240GB 内存
  • TempDB 是 8x16GB 的数据文件,没有自动增长(总共 128GB)
  • 物理/独立服务器

该服务器用于 ETL 处理。我们刚刚在此服务器中安装了更多 RAM,总共 240GB RAM。SQL Server 服务是唯一真正运行的东西。

内存在 BIOS、OpenManage 和 Windows 中显示良好。

如果我将 SQL Server 配置为使用 70/100GB 的最小/最大内存,我们没有问题。但是,一旦我将其增加到 120/150GB,当我运行我们的 ETL 进程之一时,我会收到以下错误:

无法为数据库 'tempdb' 中的对象 '<临时系统对象:422234507706368>' 分配空间,因为 'PRIMARY' 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。(消息 1105,状态 2,过程未知,第 1 行)

在更改内存配置之前,我们从未遇到过这个问题。重新配置回原来的70/100GB后,我们没有收到这个错误。

我尝试过的事情:

  1. 将 TempDB 数据文件设置为自动增长。这只会导致文件自动增长,直到达到磁盘容量,然后失败。
  2. 添加更多 TempDB 数据文件。如图所示相同的错误。
  3. 将 TempDB 大小增加到 8x32GB(总共 256GB)

我不知道是什么导致了这个问题。

Der*_*omm 3

感谢大家的帮助。

在仔细研究了一些执行计划后,发现有一个 JOIN 根据可用 RAM 的大小进行不同的处理。RAM 较少时,它会使用哈希对其进行评估;当内存更多时,它使用一系列合并连接。

所以基本上它归结为写得不好的 T-SQL,我目前正在重构它。

  • 这是非常违反直觉的,因为散列连接需要内存授予,而合并则不需要。是否有额外的排序操作来支持合并连接? (4认同)