SQL Server Reporting Services 慢 TotalTimeDataRetrieval 快 ExecuteReaderTime

Reg*_*ser 5 sql-server ssrs

我编写了一份每天由数百个用户执行的报告,并且数据集的底层存储过程只需几毫秒即可执行。根据 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 保持连接打开时间更长?也许工作线程在空闲超过几秒后被杀死?

小智 0

哇,这是一个非常古老的问题。我相信我已经找到了问题的答案,但您必须看看它是否对您有帮助。

使用跟踪至少应该让您知道连接时间是否很慢,或者查询时间是否很慢......

我按照此处找到的说明进行操作。

我将在此处包含详细信息,以防链接中断:

首先,配置Report Server以打开跟踪

本机模式报表服务器的配置设置 您可以从 SQL Server Management Studio 中的“服务器属性”页面打开或关闭报表执行日志记录。EnableExecutionLogging 是高级属性。

默认情况下,日志条目保留 60 天。超过此日期的条目将在每天凌晨 2:00 删除。在成熟的安装中,在任何给定时间只能提供 60 天的信息。

您无法对记录的行数或条目类型设置限制。

要启用执行日志记录:

使用管理权限启动 SQL Server Management Studio。例如,右键单击 Management Studio 图标,然后单击“以管理员身份运行”。

连接到所需的报表服务器。

右键单击服务器名称,然后单击属性。如果禁用“属性”选项,请验证您是否使用管理权限运行 SQL Server Management Studio。

单击日志记录页面。

选择启用报告执行日志记录。

要启用详细日志记录:

您需要按照前面的步骤所述启用日志记录,然后完成以下操作:

在“服务器属性”对话框中,单击“高级”页面。

在用户定义部分中,将 ExecutionLogLevel 更改为详细。该字段是文本输入字段,两个可能的值是详细和正常。

接下来运行一些报告。

查询ReportServer数据库,它将有这个视图:

    Use ReportServer  
    select * from ExecutionLog3 order by TimeStart DESC
Run Code Online (Sandbox Code Playgroud)

最后一列是一个名为AdditionalInfo 的XML 列

对于每个数据集,它会说明连接需要多长时间以及获取数据需要多长时间。这是一个例子:

...
 <Connections>
    <Connection>
      <ConnectionOpenTime>4540</ConnectionOpenTime>
      <DataSets>
        <DataSet>
          <Name>CourseAreas</Name>
          <RowsRead>18</RowsRead>
          <TotalTimeDataRetrieval>4554</TotalTimeDataRetrieval>
          <ExecuteReaderTime>11</ExecuteReaderTime>
        </DataSet>
      </DataSets>
    </Connection>
...
Run Code Online (Sandbox Code Playgroud)

看到这里,连接到数据库花了 4540 毫秒!这实际上是本地数据库服务器。运行查询仅需 11 毫秒。出了点问题...

所以现在我去了运行报表服务器的机器来配置它:http://localhost/reports

我导航Home -> 相关文件夹 -> 相关 Datasource。ConnectionString 有一个本地计算机的 IP 地址(甚至不是它的主地址...),我将其更改为“localhost”,并测试了连接。这是瞬间的。我不确定,可能使用内存连接而不是 TCP/IP。

在我进行更改之前,按“测试连接”大约需要 5 秒才能返回,就像跟踪中报告的那样。我应用了更改,测试连接立即返回。单击“应用”后,我确认现在我的报告在一秒钟内就会返回。一些建立三个数据集连接的报告需要 15 秒或更长时间,而现在应该是亚秒级。

问题解决了!