Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server存储过程在一段时间后变慢_Sql Server_Stored Procedures - Fatal编程技术网

Sql server SQL Server存储过程在一段时间后变慢

Sql server SQL Server存储过程在一段时间后变慢,sql-server,stored-procedures,Sql Server,Stored Procedures,我在SQLServer中创建了一个存储过程,它在一秒钟内返回数据。这个存储过程在几天内工作正常,以后会变慢。但是,如果我不做任何更改就重新执行它,它会变得很快 我知道,重新编译可以解决这个问题。有什么建议吗 由于此查询几乎每秒都会被命中,重新编译是否也会导致性能问题 由于几乎每秒都会命中此查询,因此重新编译还会导致任何性能问题吗 是的,重新编译会占用CPU资源。尽管编译查询计划只需几毫秒,但这会增加额外的CPU负担,因为查询不会使用现有的查询计划 我知道重新组合可以解决这个问题 SQL serv

我在SQLServer中创建了一个存储过程,它在一秒钟内返回数据。这个存储过程在几天内工作正常,以后会变慢。但是,如果我不做任何更改就重新执行它,它会变得很快

我知道,
重新编译
可以解决这个问题。有什么建议吗

由于此查询几乎每秒都会被命中,
重新编译
是否也会导致性能问题

由于几乎每秒都会命中此查询,因此重新编译还会导致任何性能问题吗

是的,重新编译会占用CPU资源。尽管编译查询计划只需几毫秒,但这会增加额外的CPU负担,因为查询不会使用现有的查询计划

我知道重新组合可以解决这个问题

SQL server将使用传递的参数存储查询计划,并为此输入优化计划

假设您有一个表,每个客户的订单大致相等,那么每次重新编译都不会对您有帮助

另一方面,如果客户的订单分布不均匀,在1-10000范围内。在这种情况下,如果SP是使用具有一个订单的客户的输入来编译的,则当10000个订单通过SQL传递时,客户将低估内存,并可能溢出到tempdb


你有很多方法可以克服,试着阅读我提到的链接,看看哪个选项对你有效

你是否尝试过更新统计数据?你的问题缺少很多细节,这些细节可以进行一些初步分析。例如:返回的数据来自哪里?(假设它是从表中提取出来的,似乎是安全的,但是哪些表以及它们是如何组织的);除了选择,SP还做什么?返回的数据有多大。。。。。此外,还需要快速和慢速的实际执行计划。我的SP正在从多个表中选择数据,它存储在本地临时表中并从中进行选择。临时表中的数据量仅为300左右。