我在两个不同的环境中执行相同的查询
我想知道为什么查询在第一个环境中执行需要6分钟,在第二个环境中执行需要很多个小时。
我通过执行下面的查询来检查为sql server分配的内存,这两个环境具有相同的值。
SELECT value_in_use
FROM sys.configurations
WHERE name = 'max server memory (MB)'
查询在第二个环境中花费太多时间的原因是什么?
PS:两个环境中的行数相同(约2百万)
答案 0 :(得分:2)
有几个因素会使结果不同。我不愿意提及它们,因为它们是人们倾向于拒绝的那种东西,但我已经经历过所有这些并且有一些被msft确认。
首先,建议您查看执行计划的人是在正确的轨道上。这可能至少可以为您提供一个与众不同的线索。
原因(假设数据的大小和内容相同)
等
所涉及的时差表明最有可能采用不同的执行计划。
如果所有其他内容(索引等)相同,则有时强制SQLServer重新运行统计信息,然后再次尝试查询。过去,SQLServer根据表中数据的更改量自动更新统计信息。有时这会导致暂时不好的统计信息,因为一个表达到更新的阈值但其他表没有,并且优化器选择了错误的计划。这一切似乎都是不太可能的,但我曾经构建过一个定期解决这个问题的产品,并且很幸运能够访问MSFT SQLServer开发人员帮助我证明这一点。
另一个真正打击我的是缓慢的san或慢VMWare环境。 Sans经常被声称速度很快,但由于网络连接速度慢或工作负载相互竞争,导致实际用户表现糟糕。 VMWare或其他虚拟化环境通常会导致同样的问题,尤其是在不想弄清楚哪些工作负载到达其集群的大型组织中。别人的工作量会影响你的工作量。所以性能测试失去了意义。
我的钱正在改变计划的一些因素,如数据内容,统计数据,索引配置。