2016-08-01 146 views
1

我在SQL Server中创建了一个存储过程,它在一秒内返回数据。这个存储过程可以在几天内正常工作,并在稍后变得缓慢。但是,如果我不进行更改而重新执行它,则会变得很快。SQL Server存储过程在一段时间后变得很慢

我才知道Recompile可能会解决这个问题。对此有何建议?

此外,由于此查询几乎每秒都会被触发,因此ReCompile也会导致任何性能问题?

+0

你试过更新统计吗? – bmsqldev

+0

您的问题缺少许多可以启用一些初始分析的细节。例如:返回的数据来自哪里? (假设它是从表中提取出来的,但是它们是如何组织的,这似乎是安全的);除了选择外,SP在做什么?返回的数据有多大? ..... – FDavidov

+0

也需要快速和慢时间的实际执行计划。 – Lavel

回答

1

也会重新编译导致任何性能问题,因为这个查询几乎每一秒都被击中?

是重新编译发生在CPU resources.Even收费虽然编译查询计划在几毫秒内完成,这将因为查询wont't利用现有的查询计划

我增加额外的CPU的负担知道重新编译可能会解决这个问题?

SQL服务器将存储与传递的参数的查询计划和优化计划,该输入..

假设你有一个表具有大致相等的订单每一位客户,然后重新编译每次不会帮助你

另一方面,如果你的客户的订单分布不均匀,在1-10000的范围内。在这种情况下,如果SP是使用有一个订单的客户输入编译的,那么当10000个订单客户通过SQL时低估内存并可能泄漏到tempdb ..

有很多方法可以让你克服parameter sniffing,尝试阅读我提到的链接,看看哪个选项适合你