在 Reporting Services 中使用 ExecutionLog 和 ExecutionLog3 视图
Reporting Services 报表服务器执行日志包含有关在一个或多个服务器上执行的报表的信息。 这些服务器处于本机模式扩展部署或 SharePoint 场中。 可以使用报表执行日志来找出以下各项:
- 请求报表的次数。
- 最常用的输出格式。
- 每一个处理阶段花费的处理时间(以毫秒为单位)。
该日志包含与运行报表的数据集查询所用的时长以及处理数据所用的时长有关的信息。 如果你是报表服务器管理员,你可以查看日志信息并识别长时间运行的任务。 你还可以就数据集或处理报告中可能需要改进的部分向报表作者提出建议。
配置为 SharePoint 模式的报表服务器也可以利用 SharePoint 统一日志记录服务 (ULS) 日志。 有关详细信息,请参阅为 SharePoint 跟踪日志 (ULS) 启用 Reporting Services 事件
查看日志信息
报表服务器将报表执行情况的有关数据记录在内部数据库表中。 表中的信息可从 SQL Server 视图获得。
报表执行日志存储于默认名为 ReportServer的报表服务器数据库中。 SQL 视图提供执行日志信息。 “2”和“3”视图已在最近的版本中添加,并且包含新字段或者所包含字段的名称比以前版本更友好。 较旧的视图仍保留在产品中,这样,依赖于它们的自定义应用程序将不会受到影响。 如果你不依赖于较旧的视图,例如 ExecutionLog,则应使用最新视图 ExecutionLog3。
针对 SharePoint 模式报表服务器的配置设置
可以从 Reporting Services 服务应用程序的系统设置启用或禁用报表执行日志记录。
默认情况下,日志条目保留 60 天。 超过此值的条目将于每日凌晨 2:00 删除。 对于成熟的安装,在任何给定时间都只保留 60 天的信息。
不能针对行数或所记录的条目类型设置限制。
为 SharePoint 服务器启用执行日志记录
在 SharePoint 管理中心的“应用程序管理”组中,选择“管理服务应用程序”。
选择要配置的 Reporting Services 服务应用程序的名称。
选择系统设置。
在 “日志记录” 部分中选择 “启用执行日志记录” 。
选择“确定”。
为 SharePoint 服务器启用详细日志记录
你需要如前面的步骤中所述启用日志记录,然后完成以下步骤:
从 Reporting Services 服务应用程序的“系统设置”页,找到“用户定义”部分。
将 ExecutionLogLevel 更改为 verbose。 该字段是文本输入字段,其两个可能的值是 verbose 和 normal。
针对本机模式报表服务器的配置设置
从 SQL Server Management Studio 的“服务器属性”页,您可以启用或禁用报表执行日志记录。 EnableExecutionLogging 是高级属性。
默认情况下,日志条目保留 60 天。 超过此值的条目将于每日凌晨 2:00 删除。 对于成熟的安装,在任何给定时间都只保留 60 天的信息。
不能针对行数或所记录的条目类型设置限制。
为本机模式服务器启用执行日志记录
使用管理权限启动 SQL Server Management Studio。 例如,用鼠标右键单击 Management Studio 图标,然后选择“以管理员身份运行”。
连接到所需报表服务器。
右键单击服务器名称并选择“属性”。 如果“属性”选项被禁用,请确认你是在使用管理权限运行 SQL Server Management Studio。
选择“日志记录”页。
选择“启用报表执行日志记录” 。
为本机模式服务器启用详细日志记录
你需要如前面的步骤中所述启用日志记录,然后完成以下步骤:
在“服务器属性”对话框中,选择“高级”页。
在“用户定义”部分中,将 ExecutionLogLevel 更改为 verbose 。 该字段是文本输入字段,其两个可能的值是 verbose 和 normal。
日志字段 (ExecutionLog3)
此视图在基于 XML 的 AdditionalInfo 列中添加了更多性能诊断节点。 AdditionalInfo 列包含 1 到多个信息字段的 XML 结构。 以下示例显示了一个 Transact SQL 语句,该语句可从视图 ExecutionLog3 检索行。 该示例假定报表服务器数据库名为 ReportServer:
Use ReportServer
select * from ExecutionLog3 order by TimeStart DESC
下表描述了在报表执行日志中捕获的数据。
列 | 描述 |
---|---|
InstanceName | 处理请求的报表服务器实例的名称。 如果您的环境具有多个报表服务器,则可以对 InstanceName 分布进行分析,以便监视并确定您的网络负载平衡器是否按预期跨多个报表服务器分布请求。 |
ItemPath | 存储报表或报表项的位置的路径。 |
UserName | 用户标识符。 |
ExecutionID | 与请求关联的内部标识符。 同一用户会话的请求共享相同的执行 ID。 |
RequestType | 可能的值: 交互 订阅 分析按 RequestType=Subscription 筛选的日志数据和按 TimeStart 排序的数据可揭示大量使用订阅的时间段,这样你可能要将某些报表订阅修改为其他时间。 |
Format | 呈现格式。 |
参数 | 用于执行报表的参数值。 |
ItemAction | 可能的值:Render Sort BookMarkNavigation DocumentNavigation GetDocumentMap Findstring Execute RenderEdit 。 |
TimeStart | 指示报表进程的持续时段的开始时间和结束时间。 |
TimeEnd | |
TimeDataRetrieval | 用于检索数据的毫秒数。 |
TimeProcessing | 用于处理报表的毫秒数。 |
TimeRendering | 用于呈现报表的毫秒数。 |
源 | 报表执行的源。 可能的值: 实时 Cache:指示缓存的执行,例如,数据集查询不实时执行。 快照 历史记录 AdHoc:指示基于钻取报表动态生成报表模型。 还可以引用在客户端上预览的报表生成器报表,该报表使用报表服务器进行处理和呈现。 会话:指示已建立会话内的跟进请求。 例如,初始请求为查看第一页,跟进请求为使用当前会话状态导出到 Excel。 报表定义自定义扩展插件 (RDCE):表示报表定义自定义扩展插件。 在执行报表时,RDCE 自定义扩展插件可以在将某一报表定义传递到处理引擎前动态自定义该报表定义。 |
Status | 状态(rsSuccess 或错误代码;如果发生多个错误,则只记录第一个)。 |
ByteCount | 所呈现的报表的大小(字节)。 |
RowCount | 查询返回的结果行数。 |
AdditionalInfo | 包含与执行有关的附加信息的 XML 属性包。 对于每一行,内容可以不同。 |
AdditionalInfo 字段
AdditionalInfo 字段是包含与执行有关的其他信息的 XML 属性包或结构。 对于日志中的每一行,内容可以不同。
以下示例显示了标准日志记录和详细日志记录模式下 AddtionalInfo 字段的内容:
AddtionalInfo 的标准日志记录示例
<AdditionalInfo>
<ProcessingEngine>2</ProcessingEngine>
<ScalabilityTime>
<Pagination>0</Pagination>
<Processing>0</Processing>
</ScalabilityTime>
<EstimatedMemoryUsageKB>
<Pagination>0</Pagination>
<Processing>6</Processing>
</EstimatedMemoryUsageKB>
<DataExtension>
<SQL>1</SQL>
</DataExtension>
<Connections>
<Connection>
<ConnectionOpenTime>147</ConnectionOpenTime>
<DataSets>
<DataSet>
<Name>DataSet1</Name>
<RowsRead>16</RowsRead>
<TotalTimeDataRetrieval>642</TotalTimeDataRetrieval>
<ExecuteReaderTime>63</ExecuteReaderTime>
</DataSet>
<DataSet>
<Name>DataSet2</Name>
<RowsRead>3</RowsRead>
<TotalTimeDataRetrieval>157</TotalTimeDataRetrieval>
<ExecuteReaderTime>60</ExecuteReaderTime>
</DataSet>
</DataSets>
</Connection>
</Connections>
</AdditionalInfo>
AdditionalInfo 的详细日志记录示例
<AdditionalInfo>
<ProcessingEngine>2</ProcessingEngine>
<ScalabilityTime>
<Pagination>0</Pagination>
<Processing>0</Processing>
</ScalabilityTime>
<EstimatedMemoryUsageKB>
<Pagination>0</Pagination>
<Processing>6</Processing>
</EstimatedMemoryUsageKB>
<DataExtension>
<SQL>1</SQL>
</DataExtension>
<Connections>
<Connection>
<ConnectionOpenTime>127</ConnectionOpenTime>
<DataSource>
<Name>DataSource1</Name>
<DataExtension>SQL</DataExtension>
</DataSource>
<DataSets>
<DataSet>
<Name>DataSet1</Name>
<RowsRead>16</RowsRead>
<TotalTimeDataRetrieval>655</TotalTimeDataRetrieval>
<QueryPrepareAndExecutionTime>94</QueryPrepareAndExecutionTime>
<ExecuteReaderTime>33</ExecuteReaderTime>
<DataReaderMappingTime>30</DataReaderMappingTime>
<DisposeDataReaderTime>1</DisposeDataReaderTime>
</DataSet>
<DataSet>
<Name>DataSet2</Name>
<RowsRead>3</RowsRead>
<TotalTimeDataRetrieval>16</TotalTimeDataRetrieval>
<QueryPrepareAndExecutionTime>2</QueryPrepareAndExecutionTime>
<ExecuteReaderTime>1</ExecuteReaderTime>
<DataReaderMappingTime>0</DataReaderMappingTime>
<DisposeDataReaderTime>0</DisposeDataReaderTime>
</DataSet>
</DataSets>
</Connection>
</Connections>
</AdditionalInfo>
以下示例是可以在 AdditionalInfo 字段中看到的某些值:
ProcessingEngine
如果大多数报表仍显示值 1,则可以研究如何对其进行重新设计,以便利用更新且效率更高的按需处理引擎。
1=SQL Server 2005, 2=The new On-demand Processing Engine
<ProcessingEngine>2</ProcessingEngine>
ScalabilityTime
在处理引擎中执行与进制相关的运算所用的毫秒数。 值为
0
指示没有其他时间用于进制运算,值为0
还指示请求没有处于内存不足的状态。<ScalabilityTime> <Processing>0</Processing> </ScalabilityTime>
EstimatedMemoryUsageKB
每个组件在特定请求过程中使用的内存峰值的估计值,以 KB 为单位。
<EstimatedMemoryUsageKB> <Processing>38</Processing> </EstimatedMemoryUsageKB>
DataExtension
在报表中使用的数据扩展插件或数据源的类型。 该数目是特定数据源出现的次数。
<DataExtension> <DAX>2</DAX> </DataExtension>
ExternalImages
该值以毫秒计。 此数据可用于诊断性能问题。 从外部 Web 服务器检索图像所需的时间可能使总体报表执行速度变慢。
<ExternalImages> <Count>3</Count> <ByteCount>9268</ByteCount> <ResourceFetchTime>9</ResourceFetchTime> </ExternalImages>
连接
多级别结构
<Connections> <Connection> <ConnectionOpenTime>127</ConnectionOpenTime> <DataSource> <Name>DataSource1</Name> <DataExtension>SQL</DataExtension> </DataSource> <DataSets> <DataSet> <Name>DataSet1</Name> <RowsRead>16</RowsRead> <TotalTimeDataRetrieval>655</TotalTimeDataRetrieval> <QueryPrepareAndExecutionTime>94</QueryPrepareAndExecutionTime> <ExecuteReaderTime>33</ExecuteReaderTime> <DataReaderMappingTime>30</DataReaderMappingTime> <DisposeDataReaderTime>1</DisposeDataReaderTime> </DataSet> <DataSet> <Name>DataSet2</Name> <RowsRead>3</RowsRead> <TotalTimeDataRetrieval>16</TotalTimeDataRetrieval> <QueryPrepareAndExecutionTime>2</QueryPrepareAndExecutionTime> <ExecuteReaderTime>1</ExecuteReaderTime> <DataReaderMappingTime>0</DataReaderMappingTime> <DisposeDataReaderTime>0</DisposeDataReaderTime> </DataSet> </DataSets> </Connection> </Connections>
日志字段 (ExecutionLog2)
此视图添加了几个新字段并且重命名了其他几个字段。 以下示例是一个 Transact SQL 语句,该语句可从视图 ExecutionLog2 检索行。 该示例假定报表服务器数据库名为 ReportServer
:
Use ReportServer
select * from ExecutionLog2 order by TimeStart DESC
下表描述了在报表执行日志中捕获的数据。
列 | 描述 |
---|---|
InstanceName | 处理请求的报表服务器实例的名称。 |
ReportPath | 报表的路径结构。 作为 test 保存在根文件夹中的报表具有 /test 的 ReportPath。保存在文件夹“Samples”中名为“test”的报表将具有 /Samples/test/ 的 ReportPath。 |
UserName | 用户标识符。 |
ExecutionID | |
RequestType | 请求类型为 user 或 system 。 |
Format | 呈现格式。 |
参数 | 用于执行报表的参数值。 |
ReportAction | 可能的值:Render 、Sort 、BookMarkNavigation 、DocumentNavigation 、GetDocumentMap 、Findstring 。 |
TimeStart | 指示报表进程的持续时段的开始时间。 |
TimeEnd | 指示报表进程的持续时段的结束时间。 |
TimeDataRetrieval | 用于检索数据的毫秒数。 |
TimeProcessing | 用于处理报表的毫秒数。 |
TimeRendering | 用于呈现报表的毫秒数。 |
源 | 报表执行的源。 选项有:1=Live 、2=Cache 、3=Snapshot 、4=History 。 |
Status | 状态为 rsSuccess 或错误代码。 如果出现多个错误,则只记录第一个错误。 |
ByteCount | 所呈现的报表的大小(字节)。 |
RowCount | 查询返回的结果行数。 |
AdditionalInfo | 包含与执行有关的附加信息的 XML 属性包。 |
日志字段 (ExecutionLog)
下面的示例是一个 Transact SQL 语句,从视图 ExecutionLog 检索行。 该示例假定报表服务器数据库名为 ReportServer
:
Use ReportServer
select * from ExecutionLog order by TimeStart DESC
下表描述了在报表执行日志中捕获的数据。
列 | 描述 |
---|---|
InstanceName | 处理请求的报表服务器实例的名称。 |
ReportID | 报表标识符。 |
UserName | 用户标识符。 |
RequestType | 可能的值: True = 订阅请求 False = 交互请求 |
格式 | 呈现格式。 |
参数 | 用于执行报表的参数值。 |
TimeStart | 指示报表进程的持续时段的开始时间和结束时间。 |
TimeEnd | |
TimeDataRetrieval | 检索数据、处理报表以及呈现报表所用的毫秒数。 |
TimeProcessing | |
TimeRendering | |
源 | 报表执行的源。 可能的值:(1 = 实时,2 = 缓存,3 = 快照,4 = 历史记录,5 = 即席,6 = 会话,7 = RDCE)。 |
Status | 可能的值为 rsSuccess 、rsProcessingAborted 或错误代码。 如果出现多个错误,则只记录第一个错误。 |
ByteCount | 所呈现的报表的大小(字节)。 |
RowCount | 查询返回的结果行数。 |