Sql server 2005 每秒创建的工作文件失控

Sql server 2005 每秒创建的工作文件失控,sql-server-2005,Sql Server 2005,在我的一个数据库中,我创建了每秒工作文件的性能计数器,平均在10K到20K之间失控 有人知道如何找出是哪个查询导致了这个问题吗?令人遗憾的是,SQL Server文档在完整描述每秒创建大量工作文件时的情况方面并没有那么好 但是,它们确实提供了一些见解: 首先,他们指出创建工作文件(与工作表相反)是为了存储散列联接和散列聚合,而散列通常是在这种情况下进行的,因为操作试图联接/组合/聚合等式两侧的大量行/结果(例如,与嵌套循环或其他联接/操作相比)。有关不同联接类型的更多信息,请参见本节(请记住,

在我的一个数据库中,我创建了每秒工作文件的性能计数器,平均在10K到20K之间失控


有人知道如何找出是哪个查询导致了这个问题吗?

令人遗憾的是,SQL Server文档在完整描述每秒创建大量工作文件时的情况方面并没有那么好

但是,它们确实提供了一些见解:

首先,他们指出创建工作文件(与工作表相反)是为了存储散列联接和散列聚合,而散列通常是在这种情况下进行的,因为操作试图联接/组合/聚合等式两侧的大量行/结果(例如,与嵌套循环或其他联接/操作相比)。有关不同联接类型的更多信息,请参见本节(请记住,并非所有hashing=联接):

所以。翻译:您看到大量工作文件的原因是,您的工作负载将一个表(或一组连接)中的大量结果与另一个表(或一组连接)反复“混合”

在多租户系统中,每秒创建的工作文件数量通常很高(即高于大多数调优专家建议的单个数据库<20的典型范围)。但你报道的数字显然相当高

也就是说: -如果您没有遇到其他问题(用户威胁要杀死您、页面加载缓慢等),那么(如果您有大量RAM),这可能不是一个大问题。相反,它可能只是一种“潜伏”问题,服务器处理得很好,但这会阻碍您的扩展能力。 -解决或纠正此问题的唯一真正方法是查看您的代码和操作。如果您在单个/巨大的切片+骰子查询中组合大量行,试图对大量数据进行大量连接+聚合,然后将这些单个查询分解为多个查询,较小的“子查询”和“预过滤”可以/将减少正在创建的工作文件的数量,并将对总体性能和吞吐量产生显著影响(即,您应该看到,在许多情况下,重写查询的速度会明显加快)

我在这里写过“预过滤”的概念:

令人遗憾的是,SQL Server文档在完整描述每秒创建大量工作文件时发生的情况方面没有那么好

但是,它们确实提供了一些见解:

首先,他们指出创建工作文件(与工作表相反)是为了存储散列联接和散列聚合,而散列通常是在这种情况下进行的,因为操作试图联接/组合/聚合等式两侧的大量行/结果(例如,与嵌套循环或其他联接/操作相比)。有关不同联接类型的更多信息,请参见本节(请记住,并非所有hashing=联接):

所以。翻译:您看到大量工作文件的原因是,您的工作负载将一个表(或一组连接)中的大量结果与另一个表(或一组连接)反复“混合”

在多租户系统中,每秒创建的工作文件数量通常很高(即高于大多数调优专家建议的单个数据库<20的典型范围)。但你报道的数字显然相当高

也就是说: -如果您没有遇到其他问题(用户威胁要杀死您、页面加载缓慢等),那么(如果您有大量RAM),这可能不是一个大问题。相反,它可能只是一种“潜伏”问题,服务器处理得很好,但这会阻碍您的扩展能力。 -解决或纠正此问题的唯一真正方法是查看您的代码和操作。如果您在单个/巨大的切片+骰子查询中组合大量行,试图对大量数据进行大量连接+聚合,然后将这些单个查询分解为多个查询,较小的“子查询”和“预过滤”可以/将减少正在创建的工作文件的数量,并将对总体性能和吞吐量产生显著影响(即,您应该看到,在许多情况下,重写查询的速度会明显加快)

我在这里写过“预过滤”的概念:

威胁要杀了你的用户。。真有趣!威胁要杀了你的用户。。真有趣!