我编写了一份每天由数百个用户执行的报告,并且数据集的底层存储过程只需几毫秒即可执行。根据 ReportServer.dbo.ExecutionLog3 表,我注意到 TimeDataRetrieval 定期显示 5-10 秒。AdditionalInfo 列显示 ExecuteReaderTime 为预期的几毫秒,TotalTimeDataRetrieval 显示 5-10 秒。如何减少每次报告执行的 TotalTimeDataRetrieval?
一些更有用的事实。服务器本身有 128 GB RAM 专用于 SSRS 和操作系统,因此它不是内存限制。检索的行数为 1-20 行,估计内存使用量远低于 1,000KB。
我的最佳猜测是打开数据库连接大约需要 5-10 秒。我相信这可以通过AdditionalInfo 列中的ConnectionOpenTime 属性得到证实。它显示 5-10 秒,ConnectionOpenTime 和 ExecuteReaderTime 的总和等于 TotalTimeDataRetrieval。也许有一种方法可以强制 SQL Server 保持连接打开时间更长?也许工作线程在空闲超过几秒后被杀死?