在 SQL Server 2012 上运行大量 SQL 查询时,系统磁盘空间不足

roy*_*oyv 14 sql-server tempdb

我对 SQL Server 2012 还很陌生,如果有人可以提供帮助,我将不胜感激。我已将大型数据库的副本恢复到 SQL Server 2012,并尝试对其运行一些简单的查询。

我正在尝试对数据库136898115行表运行 SELECT 查询。这个SELECT查询只有一个简单的WHERE子句。每次运行这个查询都会失败,因为系统盘(安装Windows的分区- C:\)空间不足(这个分区只有6GB可用空间),我不明白为什么。我将 tempdb 定义为位于不同驱动器上,该驱动器具有超过 14 TB 的可用空间。当然,我的数据库也位于不同的驱动器上。

是什么让我的系统分区空间不足?是页面文件吗?

Eri*_*ins 12

默认情况下,SSMS 查询结果缓存到 C: 驱动器。转到工具\选项。见附件。将此更改为具有更多存储空间的另一个卷,您应该没问题。

在此处输入图片说明


Jon*_*gel 11

好吧,我想通了:埃里克和我都是对的!

  • 对话框中的路径如我所说,只是保存查询结果的默认路径。
  • 查询结果缓存到磁盘(我错了),但在本地配置的临时文件夹(C:\Users\<UserName>\AppData\Local\Temp在这里我的情况)。我查了一下,似乎没有明显的方法可以关闭这种缓存。

所以要点是:

  • 避免直接在 SQL 框上运行 SSMS
  • 不要SELECT *使用 SSMS 中的大表,除非结果集可以放入配置文件文件夹
  • 确保正确配置 SQL Server 最大内存设置(它可能会或可能不会导致与页面文件增长有关的此问题)


小智 8

我刚刚遇到了同样的问题。阅读上述答案后,我发现了以下内容。

工具 | 选项不是答案。我的设置为 Y: 驱动器,但我看到我的查询运行并且 C: 驱动器上的空间从 2.9GB 下降到 5.04MB(在我终止查询之前)。

所以我认为它可能是缓存结果(因为它们非常大,返回的每一行都包含一大块 XML)到 Temp 目录,这是 Jon 所说的,但他不确定你会如何改变它。

我所做的更改临时文件写入位置的操作是打开我的环境变量并编辑用户变量 TEMP 和 TMP(均设置为 C:\Temp)以写入 Z:\Temp。

我可以确认在此更改后,我看到查询在我的 Z:\Temp 目录中创建了一个非常大的文件。