在两个不同的Sql Server上执行计划不同

在我们的sql服务器上,一个查询需要20毫秒。 如果我查看执行计划,则使用并行性,哈希匹配,位图创build,…两个箭头指向左侧的许多图像。

在我们的产品运行的客户的SQL服务器上,相同的查询需要2500毫秒。 如果我看着他们的执行计划,没有平行或任何与箭头的东西被使用…

我一直在寻找几天没有为什么查询在他们的SQL服务器上运行如此之慢。

  • 并行性和所有其他的东西,可以在他们的SQL服务器上configuration?
  • 以及如何configuration?
  • 使用并行性有什么危险?

另一个奇怪的是,在我们的服务器上,查询需要大约1200次读取和0次写入。 在他们的SQL服务器上,它需要150万次读取和1500次写入。 为什么这些在读取查询完成时写入?

  • 并行性取决于服务器核心。 没有多核心,你不能并行化。 那么,硬件是一样的吗? ;)
  • 您可以configuration最大平行度,以便您没有一个用户阻止整个服务器,但没有最低限度。
  • 危险? 那么,除了某些版本的SQL Server有些错误(比没有动作慢很多的事情 – 比如:修补你的SQL服务器)这个事实,减less了被执行的CONCURRENT语句的数量,使用更多的系统资源。

在他们的SQL服务器上,它需要150万次读取和1500次写入。 为什么这些在读取查询完成时写入?

如果你看查询计划,你很可能会发现它不是纯粹的阅读,因为它涉及到一些临时的对象,显然是被写入的。 并列,合并并列都可以导致临时对象的写入操作。

您可以在执行计划的每一步中看到读/写。

在我们的产品运行的客户的SQL服务器上,相同的查询需要2500毫秒。 如果我看着他们的执行计划,没有平行或任何与箭头的东西被使用…

你检查了明显吗? 蹩脚的硬件 – 糟糕的CPU(不太可能),没有足够的RAM和完全超载的IO子系统? 现在许多人虚拟化了SQL服务器,不知何故,他们忘记了自己的大脑,放下了一个废话的IO子系统,这样你的SQL服务器很慢,因为光盘布局很糟糕。

我将不得不查看和比较两个执行计划(可以上传屏幕截图吗?或者最好,上传导出的计划,以便我可以将它们加载到企业pipe理器中)。