我对 SQL Server 2012 很陌生,如果有人可以提供帮助,我将不胜感激。我已将一个巨大数据库的副本恢复到 SQL Server 2012,并尝试对其运行一些简单的查询。
我正在尝试对数据库136898115
行表运行 SELECT 查询。这个SELECT
查询只有一个简单的WHERE
子句。每次运行这个查询都会失败,因为系统盘(安装Windows的分区- C:\
)空间不足(这个分区只有6GB可用空间),不明白为什么。我将我的 tempdb 定义在另一个驱动器上,该驱动器具有超过 14 TB 的可用空间。当然,我的数据库也位于不同的驱动器上。
是什么让我的系统分区空间不足?是页面文件吗?
SSMS 查询结果默认缓存到 C: 盘。转到工具\选项。见附件。将此更改为具有更多存储空间的另一个卷,您应该没问题。
好吧,我想通了:埃里克和我都是对的!
C:\Users\<UserName>\AppData\Local\Temp
在我的例子中)。我查了一下,似乎没有一种明显的方法可以关闭此缓存。所以要点是:
SELECT *
除非结果集适合配置文件文件夹,否则不要从 SSMS 中的大表中获取我刚刚遇到了同样的问题。在阅读了上面的答案后,我发现了以下内容。
工具 | 选项不是答案。我的设置为 Y:驱动器但我看到我的查询运行并且 C:驱动器上的空间从 2.9GB 下降到 5.04MB(在我终止查询之前)。
所以我认为这可能是缓存结果(因为它们非常大,返回的每一行都包含一大块 XML)到 Temp 目录,这就是 Jon 所说的,但他不确定你会如何改变它。
我所做的更改临时文件的写入位置是打开我的环境变量并编辑用户变量 TEMP 和 TMP(均设置为 C:\Temp)以写入 Z:\Temp。
我可以确认,在此更改之后,我看到查询在我的 Z:\Temp 目录中创建了一个非常大的文件。
真的很老的问题,但我遇到了相同或相似的问题。运行特定的存储过程会看到我的 C: 驱动器上的 GB 被吃掉,直到它完全填满。
在我的情况下,增长的文件是
tempdb
默认位于以下位置的文件:您可以通过运行以下命令检查您自己的环境:
然后,您可以将其重新定位到不同的驱动器/文件夹:
完整的解释在这里 https://www.mytechmantra.com/learnsqlserver/how-to-move-tempdb-to-new-drive-in-sql-server/