数据收集器体系结构和处理

数据收集器与 SQL Server 代理和 Integration Services 集成并可广泛使用这两者。因此在使用数据收集器之前,应了解与这些 SQL Server 组件相关的某些概念。

SQL Server 代理用于计划和运行收集作业。您应该了解以下概念:

  • 作业

  • 作业步骤

  • 作业计划

  • 子系统

  • 代理帐户

有关详细信息,请参阅自动执行管理任务(SQL Server 代理)

Integration Services (SSIS) 用于执行从各个数据访问接口收集数据的包。您应该熟悉以下 SSIS 工具和概念:

  • SSIS 包

  • SSIS 包配置

有关详细信息,请参阅 Integration Services 包

数据收集器体系结构

下图说明了数据收集和存储的体系结构模型。

数据收集器体系结构

如图所示,模型中的组件分为以下类别:

  • 存储组件是包含配置信息和所收集数据的数据库。

  • 执行组件用于数据收集和存储。

  • API 组件用于实现用户界面和数据收集器之间的交互。

  • 客户端组件是数据收集器的用户界面。

以下各部分提供了有关这些类别和组件的更为详细的信息。

存储

数据收集器将数据存储在以下两个地方:msdb 数据库和管理数据仓库。

注意注意

数据收集器实现了 SQL Server 2005 中引入的用户架构分离。有关详细信息,请参阅用户架构分离

msdb 系统数据库

数据收集器将 msdb 数据库用于存储配置信息、运行时信息、审核和收集历史记录信息。运行数据收集器的 SQL Server 实例上必须存在此数据库。使用 msdb 具有以下好处:

  • 配置和运行数据收集器所需的所有数据都位于一个位置。

  • 数据收集配置可以跨多台服务器部署,而无需使用文件系统。

  • 数据收集器可以使用现有的 SQL Server 安全机制来保护数据。此外,数据库角色可以提供粒度级安全,而且无需实现跨数据库链接。

  • 由于 msdb 是一个关系数据库,因此可以确保配置和运行时数据的引用完整性。

除了存储特定于收集器的信息外,msdb 还可用于存储 SQL Server 代理作业信息和 SSIS 包信息。

数据收集配置

数据收集配置相关的表和视图包括有关收集组、收集器类型和收集项的信息。这些表和视图还包含全局数据收集器参数,例如管理数据仓库的位置。数据收集器和管理数据仓库的数据库角色也存储在此处。有关每个数据收集配置视图的列的详细信息,请参阅数据收集器视图 (Transact-SQL)

重要说明重要提示

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

SQL Server 代理作业

SQL Server 代理作业信息使用单独架构存储在 msdb 中。只要添加、删除或更改收集组,就会创建或更新此作业信息。收集组启动后,SQL Server 代理会使用此信息来执行数据收集器作业。

SQL Server Integration Services 包

SSIS 包使用现有的 SSIS 存储表存储在 msdb 中。数据收集器使用这些包来收集数据并将数据上载到管理数据仓库。

审核和历史记录

为保存数据收集运行时的详细审核和历史记录,提供了专用存储区。数据收集器运行时组件和 SSIS 包会在数据收集期间生成事件。此信息用于监视收集进程和排除其故障。

管理数据仓库

管理数据仓库是一种包含所有保留数据的关系数据库。此数据库可以与数据收集器位于同一系统上,也可以位于另一台计算机上。

执行

执行类别中的组件运行在内存中并负责收集和存储数据。

SQL Server 代理

SQL Server 代理可承载数据收集器运行时组件。数据收集计划为 SQL Server 代理作业。作业运行时,它将使用创建和执行收集组所需的参数来调用数据收集器运行时组件。

数据收集器运行时组件

数据收集器运行时组件由名为 Dcexec.exe 的独立进程承载。此组件可管理基于收集组中所提供定义的数据收集,并可接受任何收集组作为输入。数据收集器运行时组件负责加载和执行收集组包含的 SSIS 包。

收集组以下列收集和上载模式之一运行:

  • 非缓存模式。数据收集和上载处于同一个计划中。包按配置的频率启用、收集和上载数据,并一直运行到这些操作结束为止。包运行完成后,将从内存中卸载。

  • 缓存模式。数据收集和上载分别使用不同的计划。包在收到从循环控制流任务中退出的信号之前将一直收集并缓存数据。这样便确保了可以重复执行数据流,从而实现连续的数据收集。

注意注意

数据收集器运行时组件只能运行数据收集或数据上载。它不能同时运行这些任务。

SSIS 运行时组件

数据收集器运行时组件会调用数据收集器使用的 SSIS 包。这些包在进程中运行。

SSIS 包的两个最重要的任务是数据收集和数据上载,它们由单独的包执行。

  • 收集包从数据访问接口收集数据,并将其保留在临时存储区中。如果这样配置,此包还会将附加信息追加到其收集的数据中,例如快照时间或有关数据源的信息。

  • 上载包会读取临时存储区中的数据,根据需要处理数据(例如,删除不必要的数据点,使数据规范化以及进行数据聚合),然后将数据上载到管理数据仓库。上载将作为大容量插入来完成,从而最大程度地降低对服务器性能的影响。

数据收集和数据上载的分离获得了更大的灵活性和更高的效率。此设计支持频繁地(例如每 15 秒)捕获数据快照的方案,但收集的数据只需每小时上载一次。数据收集和上载的频率应由特定 SQL Server 安装的监视要求决定。

临时存储区

在数据收集过程中,临时存储区用于存储由收集组公开的或动态计算的属性值。这些值可以是在收集过程中获得的原始数据,也可以是处理的数据(例如聚合数据)。

API

API 类别包含用于配置、维护和扩展数据收集器的类库和对象模型。客户端对系统数据库的访问必须通过 API 进行。

类库

数据收集器具有自己的命名空间并独立于 SQL Server 管理对象 (SMO)。

存储过程和视图

存储过程和视图提供了对数据收集器配置数据和管理数据仓库的创建、读取、更新和删除访问。

客户端

数据收集器使用 SQL Server Management Studio 和 Windows Powershell™ 命令行界面作为客户端来配置和使用数据收集器。可以使用 SQL Server Management Studio 执行下列操作:

  • 使用对象资源管理器中的配置数据收集向导配置数据收集。

  • 使用对象资源管理器启用或禁用数据收集。

  • 使用对象资源管理器启动或停止特定收集组。

  • 使用对象资源管理器查看或者配置数据收集属性或数据收集组属性。

  • 查看基于存储在管理数据仓库中的历史数据的报表。此数据库可位于本地实例上,也可位于其他服务器上。建议采用后一种方式。

可以使用 Windows Powershell 命令行界面执行下列操作:

  • 启动或停止收集组。

  • 添加或删除收集组。

  • 更改收集组的可编辑属性。

组件交互和处理

下表说明了数据收集器体系结构中各种组件之间的交互。

组件

组件

说明

SQL Server Management Studio

数据收集器 API

客户端与 API 进行通信以配置数据收集器。

SQL Server Management Studio

管理数据仓库

客户端拥有对管理数据仓库的读权限,并可以获得所收集的数据。

SQL Server Management Studio,控制台客户端

数据收集器 API

这两个客户端可以通过使用 API 以编程方式配置数据收集器。

数据收集器 API

存储过程和视图

API 使用存储过程,这些存储过程对数据收集器配置信息和管理数据仓库拥有读权限和写权限。

msdb - 作业定义

SQL Server 代理

SQL Server 代理可以读取作业定义。作业定义包含作业计划和作业配置信息。

SQL Server 代理

数据收集器运行时组件

SQL Server 代理为响应作业定义而调用数据收集器。

数据收集器运行时组件

msdb - SSIS 包

数据收集器将加载 SSIS 包,并可使用 SSIS 执行这些包。

数据收集器运行时组件

msdb - 审核和历史记录

数据收集器拥有对此部分 msdb 的写权限,因此它可以记录数据收集过程中生成的事件。

SSIS

管理数据仓库

SSIS 包拥有对管理数据仓库的写权限,因此它可以上载收集的数据。

SSIS

临时存储区

在收集过程中,SSIS 可以创建、使用和删除所需的任何临时存储区。

msdb - 数据收集配置

msdb - 作业定义

数据收集配置中的信息将映射到作业定义。有关详细信息,请参阅下面的“收集组和作业映射”。

收集组和作业映射

数据收集器体系结构的一个关键元素是数据收集器配置中定义的收集组与作业定义中的作业之间的映射。

收集组是一组项,这些项是使用 SSIS 包定义的收集器类型的实例。作为内存中的一个实例,每个收集组都有一个生存期,本主题后面的部分对此进行了详细介绍。在 SQL Server 作业调用收集组时,每个收集组都由数据收集器运行时组件运行。下面的示例说明了收集组如何映射到作业。

收集组

示例 1

此示例收集组“Base Performance Data”包含单独的收集包和上载包,以支持收集包和上载包的不同计划。

Collection Set: Name = "Base Performance Data"

Collection Item: Name = "SQL_RE_Active_Requests_History"

Collection package: ARH_Collect.dtsx

Upload package: ARH_Upload.dtsx

Collection Frequency: 1 second

Collection Item: Name = "SQL_RE_Wait_Statistics"

Collection package: WS_Collect.dtsx

Upload Package: WS_Upload.dtsx

Collection Frequency: 15 seconds

Collection Item: Name = "SQL_RE_Performance_Counters"

Collection package: PC_Collect.dtsx

Upload package: PC_Upload.dtsx

Input: Counter – Locks: Current Latch Waits

Collection Frequency: 15 seconds

Collection Item: Name = "WIN_OS_Performance_Counters"

Collection package: OS_PC_Collect.dtsx

Upload package: OS_PC_Upload.dts

Input: Counter – Process: % Processor Time

Collection Frequency: 15 seconds

Upload Schedule: Every 30 minutes

示例 2

此示例收集组“Server Configuration Data”包含单个包,该包获取基于 Transact-SQL 的快照并在获得快照后将其上载到管理数据仓库。

Collection Set: Name = "Server Configuration Data"

Collection Item: Name = "SQL_RE_TSQL"

Collection and upload package: TSQL_Upload.dtsx

Input: Transact-SQL query for database sizes

Collection Frequency: <none>

Collection Item: Name = "SQL_RE_TSQL"

Collection and upload package: TSQL_Upload.dtsx

Input: Transact-SQL query for configuration options

Collection Frequency: <none>

Upload Schedule: Every 24 hours

作业

在创建上述示例中显示的收集组后,将创建 SQL Server 代理作业以执行数据收集。作业创建遵循以下规则:

  • 不同收集组的数据收集将作为单独的作业执行。

  • 使用缓存收集模式的收集组将计划为在 SQL Server 代理启动时启动的作业。这些作业连续运行并由数据收集器运行时组件控制。

  • 使用非缓存收集模式的收集组将计划为一般的 SQL Server 代理作业。这些作业使用与收集组中定义的计划相匹配的 SQL Server 代理计划。用户可以自定义执行的实际持续时间。

下面的示例对使用上述规则的作业进行了说明。这些作业可以运行提供的收集组示例。

收集组示例 1 的作业

两个作业用于处理此收集组:一个用于收集,一个用于上载。

Job 1,Name: "Base Performance Data Collection"

Category: "Data Collector"

Job Step 1:

Collection Set: Name = "Base Performance Data"

Collection Mode: Collection Only, Continuous Run

Packages run: ARH_Collect, WS_Collect, PC_Collect, OS_PC_Collect

Schedule: At Agent start-up

Job 2,Name: "Base Performance Data Upload"

Category: "Data Collector"

Job Step 1:

Collection Set: Name = "Base Performance Data"

Collection Mode: Upload Only, Single Run

Packages run: ARH_Upload, WS_Upload, PC_Upload, OS_PC_Upload

Schedule: Every 30 minutes, Starting at 12:00 AM PST

收集组示例 2 的作业

创建了一个作业来处理该收集组。

Job 3,Name = "Server Configuration Data"

Category = "Data Collector"

Job Step 1:

Collection Set, Name = "Server Configuration Data"

Collection Mode: Collection and Upload, Single Run

Packages run: TSQL_Upload, TSQL_Upload

Schedule: Every Day at 12:00 AM PST

注意注意

上述每个示例都指定了作业的收集模式。此信息用于在收集组运行时管理收集和上载处理。

数据收集器和收集组

因为数据收集器和收集组是您与之交互的数据收集的元素,所以应了解它们的有效状态以及收集组生存期的概念。

有效状态

若要打开和关闭数据收集,您可以启用或禁用数据收集。如果要进行任何影响收集器范围的参数的更改(例如对管理数据仓库连接字符串的更改),必须首先禁用数据收集。

如果要进行任何收集组配置更改,必须首先停止该收集组。

如果在收集组运行时禁用数据收集,这些收集组将进入暂停状态,直到重新启用数据收集。重新启用数据收集后,这些收集组将恢复执行。任何在禁用数据收集时未运行的收集组仍将保持停止状态。在禁用数据收集时,可以启动任何数据收集组。不过,在启用数据收集之前,收集组将不会开始执行。

收集组生存期

收集组启动后,它会在其生存期内经过几种转换。可能的转换以及转换期间发生的操作包括:

  1. 构造

    • 在内存中创建一个收集组对象。

    • 可以自由设置和修改所有属性。

  2. 添加收集器类型

    • 向收集组添加一个新的收集项。

    • 收集组验证是否所有收集项都引用相同的目标根目录。

  3. 删除收集器类型

    • 从收集组删除现有收集项。
  4. 创建

    • 收集组验证它是否至少包含一个收集项。

    • 有关所有收集项及其属性、收集频率和收集组的所有属性的信息将插入数据收集器配置存储区。

    • 收集组的初始状态设置为非活动。

    • 创建一个或多个将运行该收集组的 SQL Server 代理作业并将其链接到该收集组。

    • SQL Server 代理作业的初始状态设置为非活动。

  5. 启动

    • 收集组的状态更改为正在运行。

    • 启用关联的 SQL Server 代理作业。

    • 如果作业标记为在代理启动时运行,该作业将立即启动。

  6. 停止

    • 收集组的状态更改为已停止。

    • 停止并禁用收集组的所有正在运行的作业。

    • 与收集组关联的所有作业设置为非活动。

  7. 删除

    • 与收集组关联的所有作业都将从内存中删除。

    • 将删除与该收集组关联的数据收集器配置中的所有对象(收集项、收集组)。

运行时处理

下图给出了在启动收集组并收集和上载数据时运行时处理的高级和简化视图。虽然此图将数据收集和数据上载显示为两个单独的作业过程,但它们也可以是一个作业,如上面的示例所示。

收集和上载处理步骤

数据收集

在上面的图中,数据收集过程步骤使用“C”作为前缀。处理步骤如下所示:

  1. 存储过程启动收集组。msdb 中收集组的状态更改为正在运行。此状态更改将启用与收集组关联的 SQL Server 代理作业。

  2. SQL Server 代理按如下方式启动作业:

    • 如果该收集组模式设置为缓存,收集作业将立即启动。

    • 如果收集组模式设置为非缓存,收集作业将根据配置的计划启动。

  3. 作业启动时,它将生成一个进程来执行数据收集器运行时组件 (Dcexec.exe),并通知该组件运行与收集组关联的收集包。

  4. Dcexec.exe 启动时,它将读取 msdb 中的数据收集器配置以确定使用何种收集模式(缓存或非缓存)。

  5. 数据收集器运行时组件使用 SSIS 运行时组件来运行为收集组定义的收集包。

  6. 收集包将运行,直到它们接收到停止信号或到达预定义的端点。在所收集的数据上载之前,收集包会将这些数据保存在临时区域中。

    注意注意

    对收集组的收集器类型的设计将确定使用何种类型的临时区域。临时区域可能是共享的内存区域、临时文件或消息队列。

数据上载

在上面的图中,数据上载处理步骤使用“U”作为前缀。处理步骤如下所示:

  1. 要求上载时,存储过程会启动作业,该作业由 SQL Server 代理处理。

  2. SQL Server 代理按如下方式启动作业:

    • 如果用户提交了按需上载请求,则会立即启动上载作业。

    • 如果没有按需上载请求,将根据为收集组配置的计划启动上载作业。

  3. 作业启动时,它将生成一个进程来执行数据收集器运行时组件 (Dcexec.exe),并通知该组件运行与收集组关联的上载包。

  4. Dcexec.exe 启动时,它将读取 msdb 中的数据收集器配置以确定如何处理上载(例如,管理数据仓库的连接字符串,或所需的任何数据处理)。

  5. 数据收集器运行时组件使用 SSIS 运行时组件来运行为收集组定义的上载包。

  6. 上载包将读取保存在临时区域中的数据并执行所需的转换(例如规范化或抽样)。转换完成后,上载包将连接到管理数据仓库并插入数据。

  7. 上载完成后,该过程结束但收集组状态未发生变化。下一次上载将根据收集组计划来启动。