Share via


資料收集器架構和處理

資料收集器與 SQL Server Agent 和 Integration Services 整合在一起,而且會廣泛地使用這兩者。因此,在您使用資料收集器之前,應該要先了解與這些 SQL Server 元件有關的某些概念。

SQL Server Agent 可用來排程及執行收集作業。您應該了解以下概念:

  • 作業

  • 作業步驟

  • 作業排程

  • 子系統

  • Proxy 帳戶

如需詳細資訊,請參閱<自動化管理工作 (SQL Server Agent)>。

Integration Services (SSIS) 可用來執行從個別資料提供者收集資料的封裝。您應該要熟悉下列的 SSIS 工具和概念:

  • SSIS 封裝

  • SSIS 封裝組態

如需詳細資訊,請參閱<Integration Services 封裝>。

資料收集器架構

下圖顯示資料收集和儲存的架構模型。

資料收集器架構

如圖中所示,此模型中的元件會分成以下類別:

  • 儲存元件是包含組態資訊及收集之資料的資料庫。

  • 執行元件是用於資料收集和儲存。

  • API 元件是用來啟用使用者介面與資料收集器之間的互動。

  • 用戶端元件是資料收集器的使用者介面。

下列章節將提供有關這些類別和元件的更多詳細資訊。

儲存體

資料收集器會將資料儲存在兩個位置:msdb 資料庫和管理資料倉儲。

[!附註]

資料收集器會實作使用者結構描述分隔 (在 SQL Server 2005 中引進)。如需詳細資訊,請參閱<使用者結構描述分隔>。

msdb 系統資料庫

資料收集器會使用 msdb 資料庫來儲存組態資訊、執行階段資訊、稽核及收集記錄資訊。這個資料庫必須位於執行資料收集器的 SQL Server 執行個體上。使用 msdb 可提供下列優點:

  • 設定及執行資料收集器所需的所有資料都位於同一個位置。

  • 可以在數部伺服器當中部署資料收集組態,而不需要使用檔案系統。

  • 資料收集器可以使用現有的 SQL Server 安全性機制來保護資料。此外,資料庫角色也可以提供更細微的安全性,而且不需要實作跨資料庫的鏈結。

  • 由於 msdb 為關聯式資料庫,所以可以確定組態和執行階段資料的參考完整性。

除了儲存收集器特有的資訊以外,msdb 也可用來儲存 SQL Server Agent 作業資訊和 SSIS 封裝資訊。

資料收集組態

資料收集組態相關的資料表和檢視表包含有關收集組、收集器型別和收集項的資訊。此外,這些資料表和檢視表也包含全域資料收集器參數,例如管理資料倉儲的位置。資料收集器和管理資料倉儲的資料庫角色也會儲存在這裡。如需有關每個資料收集組態檢視表之資料行的詳細資訊,請參閱<資料收集器檢視 (Transact-SQL)>。

重要事項重要事項

請勿修改組態資料表中的資料。您必須依照預存程序所強制執行的特定方式來插入、更新和刪除這些資料表中的資料。資料表名稱和定義可以變更,在您更新應用程式時會變更,也可能在未來版本中變更。請勿直接使用資料表,而是要使用資料收集器所提供之記載的預存程序和檢視表,以存取執行個體和應用程式資料。

SQL Server Agent 作業

SQL Server Agent 作業資訊會儲存在使用個別結構描述的 msdb 中。每當加入、移除或變更收集組時,就會建立或更新這項作業資訊。當收集組啟動時,SQL Server Agent 會使用這項資訊來執行資料收集器作業。

SQL Server Integration Services 封裝

SSIS 封裝會儲存於使用現有 SSIS 儲存資料表的 msdb 中。資料收集器會使用這些封裝來收集資料,並將資料上載到管理資料倉儲。

稽核和記錄

會提供專用儲存區來儲存資料收集執行的詳細稽核和歷程記錄。資料收集器執行階段元件和 SSIS 封裝會在資料收集期間產生事件。這項資訊是用來監視及疑難排解收集程序。

管理資料倉儲

管理資料倉儲是一種關聯式資料庫,其中包含所有保留的資料。這個資料庫可位在與資料收集器相同的系統上,也可以在另一部電腦上。

執行

執行類別中的元件會在記憶體中執行,而且負責收集及儲存資料。

SQL Server Agent

SQL Server Agent 會主控資料收集器執行階段元件。資料收集會排程為 SQL Server Agent 作業。當此作業執行時,它會使用建立及執行收集組所需的參數來叫用資料收集器執行階段元件。

資料收集器執行階段元件

資料收集器執行階段元件是由名為 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 Agent

SQL Server Agent 可以讀取作業定義。作業定義包含作業排程和作業組態資訊。

SQL Server Agent

資料收集器執行階段元件

SQL Server Agent 會叫用資料收集器,以回應作業定義。

資料收集器執行階段元件

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 Agent 作業來執行資料收集。下列規則可管理作業的建立:

  • 不同收集組的資料收集會當做個別作業來執行。

  • 使用快取收集模式的收集組會排程為作業,當 SQL Server Agent 啟動時會啟動這些作業。這些作業會連續執行,而且會由資料收集器執行階段元件來控制。

  • 使用非快取收集模式的收集組會排程為一般 SQL Server Agent 作業。這些作業使用的 SQL Server Agent 排程與收集組內所定義的排程相符。實際的執行持續時間可由使用者自訂。

下列範例會示範使用上述規則作業。這些作業可以執行所提供的收集組範例。

收集組的作業範例 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 Agent 作業,並將其連結到收集組。

    • SQL Server Agent 作業的初始狀態設定為「非使用中」。

  5. 啟動

    • 收集組的狀態變更為「正在執行」。

    • 關聯的 SQL Server Agent 作業已啟用。

    • 如果作業標示為要在 Agent 啟動時執行,此作業會立即啟動。

  6. 停止

    • 收集組的狀態變更為「已停止」。

    • 此收集組的所有執行中作業都會停止且停用。

    • 與此收集組有關聯的所有作業都設定為「非使用中」。

  7. 刪除

    • 與此收集組有關聯的所有作業都會從記憶體中刪除。

    • 資料收集器組態中與此收集組有關聯的所有物件 (收集項、收集組) 都會遭到刪除。

執行階段處理

下圖提供當啟動收集組以及收集和上載資料時,執行階段處理的高層級和簡化的檢視。雖然這個圖將資料收集和資料上載顯示為兩個不同的作業處理,但是它們也可以是單一作業,如之前的範例所示。

收集及上傳處理步驟

資料收集

在上圖中,資料收集的處理步驟有前置 "C"。處理步驟如下:

  1. 預存程序啟動收集組。msdb 中的收集組狀態變更為「正在執行」。這個狀態變更會啟用與此收集組有關聯的 SQL Server Agent 作業。

  2. SQL Server Agent 會啟動作業,如下所示:

    • 如果收集組模式設定為「快取」,會立即啟動收集作業。

    • 如果收集組模式設定為「非快取」,會根據設定的排程來啟動收集作業。

  3. 當作業啟動時,它會繁衍處理序來執行資料收集器執行階段元件 (Dcexec.exe),並告訴它要執行與此收集組有關聯的收集封裝。

  4. 當 Dcexec.exe 啟動時,它會讀取 msdb 中的資料收集器組態,以查明所要使用的收集模式 (快取或非快取)。

  5. 資料收集器執行階段元件會使用 SSIS 執行階段元件來執行為此收集組定義的收集封裝。

  6. 收集封裝會持續執行,直到它們收到停止的信號或是到達預先定義的端點為止。收集封裝會將收集而來的資料儲存在臨時區域中,直到資料上載為止。

    [!附註]

    此收集組之收集器型別的設計會決定所要使用的臨時區域類型。臨時區域可以是共用的記憶體區、暫存檔或訊息佇列。

資料上載

在上圖中,資料上載的處理步驟有前置 "U"。處理步驟如下:

  1. 當需要上載時,預存程序會啟動此作業 (由 SQL Server Agent 處理)。

  2. SQL Server Agent 會啟動作業,如下所示:

    • 如果視需要的上載要求是由使用者所提交,則會立即啟動上載作業。

    • 如果沒有視需要的上載要求,則會根據為此收集組設定的排程來啟動上載作業。

  3. 當作業啟動時,它會繁衍處理序來執行資料收集器執行階段元件 (Dcexec.exe),並告訴它要執行與此收集組有關聯的上載封裝。

  4. 當 Dcexec.exe 啟動時,它會讀取 msdb 中的資料收集器組態,以查明要如何處理上載 (例如,管理資料倉儲的連接字串或是所需的任何資料處理)。

  5. 資料收集器執行階段元件會使用 SSIS 執行階段元件來執行為此收集組定義的上載封裝。

  6. 上載封裝會讀取臨時區域中所保留的資料,並執行必要的轉換,例如正規化或取樣。當轉換完成時,上載封裝會連接到管理資料倉儲,並插入資料。

  7. 上載完成之後,這項程序就會結束,但是收集組狀態不會變更。下一次的上載會根據收集組的排程來啟動。