数据收集器日志记录

数据收集器为每个收集组及其收集包捕获并记录不同类型的信息。写入 msdb 表的此类信息提供了有关收集组当前状态和包执行结果的信息。这些日志表还提供有关每个收集组及其包的统计信息。可以使用以下类型的信息来监视和分析数据收集:

  • 当前正在运行的收集组。

  • 收集组运行的历史记录。

  • 对于给定的收集组而言,作为该收集的一部分执行的包的层次结构。

  • 对于每个包而言,其启动和停止时间、持续时间、完成状态和已处理行数。

  • 导致失败的包(如果收集组运行失败)。

  • 失败的包中的组件以及错误消息(如果包执行失败)。

  • 对于每个包而言,该包为每次运行记录的日志事件的序列。

数据收集器日志记录中的 SSIS 角色

数据收集器通过使用存储过程和 SQL Server 2008 Integration Services (SSIS) 任务执行及日志记录功能来实现日志记录。这些功能在运行时事件发生时为日志提供程序创建摘要和详细日志条目。有关详细信息,请参阅在包中实现日志记录

记录的事件为程序执行的所有阶段提供参照点。每个事件记录将映射到任务运行时所在的包的执行 ID。数据收集器将这些 ID 映射到特定的包以收集和上载数据。

收集组和收集包日志记录

数据收集器日志记录的高级体系结构和数据处理方式如下所示:

  • 使用存储过程将在运行时由数据收集器提供的收集组信息存储在数据收集器表中。为每条记录提供了一个 log_id,可用于引用表条目并将包映射到 SSIS 执行 ID。

  • 在开始和结束运行每个包时都会记录包信息。此日志记录是通过在每个包的控制流开始和结束时运行 Transact-SQL 任务来执行的。

    • 当包正在运行时,数据收集器将进行定期更新和统计信息更新。每个包都有一个用于记录错误事件的全局错误处理程序任务(使用 SSIS 包事件来实现)。这是通过将 SSIS“执行 SQL 任务”放入相应控制流中以提供必要的事件日志记录来实现的。有关详细信息,请参阅SSIS 执行 SQL 任务控制流元素

    • SSIS 生成的事件将使用 dbo.sp_ssis_addlogentry 存储过程记录在 SSIS 定义的 dbo. sysssislog 表中。

  • 包结束时,将会记录成功或失败事件。

  • 当收集组停止时,将记录此信息。与包一样,也将记录成功或失败事件。

数据收集器生成的数据存储在 dbo.syscollector_execution_log_internal 表中,该表联接到 dbo.sysssislog。这为收集组执行提供了完整视图。这些表将在下节中进行详细说明。

日志表

下面的表中列出了这些日志表和它们的列。本主题后面的“访问和查看日志数据”部分介绍了可用于获取有关日志表之数据类型和内容的详细信息的函数和视图。

表名

说明

syscollector_execution_log_internal

存储执行信息的数据收集器表。它包含以下列:

  • log_id

  • parent_log_id

  • collection_set_id

  • collection_item_id

  • start_time

  • last_iteration_time

  • finish_time

  • runtime_execution_mode

  • status

  • operator

  • package_id

  • package_execution_id

  • failure_message

syscollector_execution_stats_internal

用于存储统计信息的数据收集器表。它包含以下列:

  • log_id

  • task_name

  • execution_row_count_in

  • execution_row_count_out

  • execution_row_count_errors

  • execution_time_ms

  • log_time

sysssislog

用于存储事件信息(例如收集组或收集包的启动,以及警告或错误)的由 SSIS 定义的表。有关详细信息,请参阅 sysssislog (Transact-SQL)

重要说明重要提示

不要修改日志表中的数据。这些表中的数据必须以特定方式(如通过存储过程强制执行)进行插入、更新和删除。表名和表定义可以在运行时更改,在您更新该应用程序时肯定会更改,在未来的版本中也可能更改。不要直接使用表,而应使用数据收集器提供的已记录的存储过程和视图来访问实例和应用程序数据。

日志保留

收集组日志保留的时间长度与收集组的数据在管理数据仓库中保留的时间长度相同。它通过保持期来定义,您可以为每个收集组配置保持期。当保持期过期时,SQL Server 代理作业将清除日志中的数据。

日志记录级别

提供了三种日志记录级别,用于处理可能出现的不同收集情况。这样可以确保在需要时您有对收集组或包进行故障排除所需的数据。您可以根据日志记录要求为每个收集组设置不同的日志记录级别。

下表介绍了可用的日志记录选项。

级别

说明

0

默认日志记录级别。记录执行信息和以下 SSIS 事件:

  • 启动或停止收集组

  • 启动或停止包

  • 错误信息

1

包含 0 级日志记录和以下事件:

  • 执行统计信息

  • 连续运行收集的进度

  • 来自 SSIS 的警告事件

2

包含 1 级日志记录和详细 SSIS 事件。

默认情况下,日志记录级别为 0。级别 0 用来避免产生过多的日志消息,例如由 1 级日志记录生成的警告事件。这些警告事件中可能包括 SSIS 提供的性能建议,用户不能更正它们。

级别 2 提供可用于高级疑难解答的附加事件信息。

SSIS 事件

每个数据收集器包都使用 SQL Server 事件提供程序。将记录下表中描述的事件,并且可以查看这些事件。

事件名称

日志记录级别

说明

PackageBegin

0

始终生成的标准事件。无法禁用此事件。

PackageEnd

0

始终生成的标准事件。无法禁用此事件。

OnError

0

错误事件。

OnWarning

1

警告事件。

PipelineBufferLeak

2

提供在缓冲区管理器停止之后使缓冲区保持活动状态的任何组件的相关信息。如果缓冲区仍保持活动状态,则没有释放缓冲区资源并且可能导致内存泄漏。此日志条目提供组件的名称和缓冲区的 ID。

PipelineExecutionPlan

2

报告数据流的执行计划。执行计划提供有关缓冲区将如何发送到组件的信息。此信息与 PipelineExecutionTrees 日志条目一起用于描述在数据流任务中所发生的事情。

PipelineExecutionTrees

2

报告数据流中布局的执行树。数据流引擎的计划程序使用这些树为数据流生成执行计划。

PipelineInitialization

2

提供有关任务的初始化信息。此信息包括要用来临时存储二进制大型对象 (BLOB) 数据、默认缓冲区大小和缓冲区行数的目录。取决于数据流任务的配置,可能写入多个日志条目。

ExecuteSQLExecutingQuery

2

提供有关 SQL 语句的执行阶段的信息。在任务连接到数据库时、任务开始准备 SQL 语句时以及执行完 SQL 语句之后写入日志条目。准备阶段的日志条目包括任务所使用的 SQL 语句。

FileSystemOperation

2

报告任务所执行的操作。在文件系统操作开始时写入日志条目,日志条目包括有关源和目标的信息。

ExecuteProcessExecutingProcess

2

提供所配置任务要运行的进程的信息。

写入两个日志条目。一个日志条目包含有关任务所运行可执行文件的名称和位置的信息,另一个条目则记录从可执行文件退出的信息。

访问和查看日志数据

您可以使用提供的函数和视图以编程方式访问并查看数据。也可以使用 Management Studio 对象资源管理器中的**“日志文件查看器”**来查看日志。有关详细信息,请参阅如何查看收集组日志

下表对可用来访问日志数据的函数和视图进行了说明。

名称

说明

fn_syscollector_get_execution_details (Transact-SQL)

为请求的 log_id 及其依赖的日志条目返回有关收集组和收集包日志的详细信息。

fn_syscollector_get_execution_stats (Transact-SQL)

为请求的 log_id 返回一组统计信息。统计信息是对 syscollector_execution_stats 视图中的条目进行计算而得出的。

syscollector_execution_log (Transact-SQL)

提供了 syscollector_execution_log_internal 表的视图。

syscollector_execution_log_full (Transact-SQL)

提供了 syscollector_execution_log_internal 表的详细视图并说明了层次结构(从顶级收集日志条目开始并遍历所有作为收集组一部分运行的包)中的日志条目。

syscollector_execution_stats (Transact-SQL)

提供了 syscollector_execution_stats_internal 表的 1:1 视图。