相同的查询,不同的执行计划

时间:2010-05-25 11:45:42

标签: sql-server performance execution sql-execution-plan

我正试图找到一个让我疯狂的问题的解决方案......

我的查询在QA服务器中运行得非常快,但生产速度非常慢。我意识到他们有不同的执行计划...所以我尝试重新编译,清理执行计划的缓存,更新统计信息,检查整理的类型......但我仍然无法找到正在发生的事情... < / p>

运行查询的数据库完全相同,SQL Server也具有相同的配置。

非常感谢任何新想法。

谢谢, 甲


我刚刚意识到QA服务器正在运行SP3,而生产中则是SP2。这会对这个问题产生什么影响吗?

5 个答案:

答案 0 :(得分:2)

生产服务器是否有可能拥有更大的数据库大小?该计划可能有所不同,因为它基于其包含的数据的统计数据。

答案 1 :(得分:2)

我认为这可能是由于存在大量数据。它发生在我们身上一次,查询确实在QA服务器中飞行,但在生产中速度非常慢。在打破了我们的头脑一段时间后,我们发现QA服务器有15K行,其中产量为150万。

HTH

答案 2 :(得分:1)

如果执行计划相同而且速度很慢,那就是数据库负载,硬件,锁定/阻塞等。

但是,如果执行计划不同,则两个数据库之间会有所不同。两者中的统计数据是最新的,具有完全相同的模式,相同的索引,相似的行数,相同的PK和索引值分布等.QA数据来自哪里,随机数据还是从生产中恢复?

答案 3 :(得分:0)

禁止在生产中执行并行查询:)

答案 4 :(得分:0)

我最近碰到了这个,这就是我找到的。

我有两个基本上是彼此副本的数据库。在一个版本上,TVF需要1秒才能运行,而另一个版本需要15分钟才能运行。

底层SQL代码的执行计划非常不同。我能够通过重建TVF所依赖的一些索引来解决这个问题。执行计划不一样,但确实发生了很大的变化。并且执行时间缩短到大约一秒钟。

现在,两个版本的索引都是高度分散的。我的假设是历史统计或执行计划信息允许快速版本继续找到最佳执行计划。

总而言之:确保您查看索引的碎片,即使它们具有相同的结构或相似的碎片率。