sql-server - 为什么 SSRS 所基于的存储过程在几秒内返回结果时会报告超时?

标签 sql-server stored-procedures reporting-services timeout

我有一个报告,它呈现从存储过程返回的数据。使用探查器,我可以从报告服务捕获对存储过程的调用。

报告失败,说明报告超时,但我可以从 SSMS 执行存储过程,它会在五到六秒内返回数据。

请注意,在示例测试运行中,仅将两行返回到报表进行渲染,但在存储过程中,它可能已经处理了数千甚至数百万条记录,以便整理传返回告服务的结果。

我知道存储过程可以进一步优化,但我不明白为什么 SSRS 会超时,而从 SSMS 执行似乎只需要几秒钟。

另一个问题也出现了。如果我重新创建存储过程,报告将再次开始完美呈现。这很好,只是在很短的一段时间后,报告再次开始超时。

超时的返回似乎与添加到运行报告的主表中的新数据有关。在我测试的示例中,仅插入一百条新记录就足以搞砸报告。

我认为更正确的是,报告并不是根本原因。这是存储过程导致从 SSRS 执行时超时。

一旦再次超时,我迄今为止最好的解决方法是重新创建存储过程。这似乎不是一个理想的解决方案。

该问题似乎也只发生在我们的生产环境中。我们的测试和开发平台似乎没有出现同样的问题。尽管开发和测试没有与生产相同的记录量。

最佳答案

正如您所描述的,问题似乎来自存储过程中某些部分的执行计划的变化。查看所使用的表中保留了哪些统计信息以及添加新行如何影响它们。

If you're adding a lot of rows at the end of the range of a column (think about adding autonumbers, or timestamps), the histogram for that column will become outdated rapidly. You can force an immediate update from T-SQL by executing the UPDATE STATISTICS statement.

关于sql-server - 为什么 SSRS 所基于的存储过程在几秒内返回结果时会报告超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/237069/

相关文章:

SQL Server : how to get specific column from stored procedure without modifying it

mysql - 如果至少满足一个条件,则排除查询中的唯一 ID

sql - 如何使用sql脚本更改列的属性

sql-server - DateDiff 函数 SQL Server

mysql - 使用 like (MySQL) 的存储过程

sql - 存储过程 : get 3 values from a table and save them to another table

sql - SQL中如何去除字符串中的重复项

sql - tsql 返回索引的数据文件

mysql - mysql存储函数中的未知列错误

reporting-services - 如何从 RDLC 报告中的数据集中获取特定行