共用方式為


測量交易複製的延遲並驗證連線完整性

本主題描述如何使用複寫監視器、Transact-SQL 或 Replication Management Objects (RMO) 來測量 SQL Server 2014 中事務複製的延遲和驗證連線。 事務複製提供追蹤令牌功能,提供方便的方式測量事務複製拓撲中的延遲,以及驗證發行者、散發者和訂閱者之間的連線。 一個令牌(少量資料)會被寫入發行資料庫的交易日誌中,並且被標記為一般的複製交易然後透過系統傳送,從而允許進行計算:

  • 在發佈者提交交易與分發者的分發資料庫中插入對應命令之間,經過多少時間。

  • 在發行資料庫中插入命令到在訂閱者端認可的對應交易之間,需要多少時間。

從這些計算中,您可以回答許多問題,包括:

  • 哪些訂閱者需要最長的時間才能從發行者收到變更?

  • 預期會收到追蹤令牌的訂閱者中,有哪些尚未收到?

本主題內容

開始之前

限制與制約

追蹤令牌在停止系統時也很有用,這牽涉到停止所有活動,並確認所有節點都已收到所有未完成的變更。 如需詳細資訊,請參閱停止複寫拓撲 (複寫 Transact-SQL 程式設計)

若要使用追蹤令牌,您必須使用特定版本的 Microsoft SQL Server。

  • 發佈伺服器必須是 Microsoft SQL Server 2005 或更新版本。

  • 發行者必須是 SQL Server 2005 或更新版本或 Oracle 發行者。

  • 如果訂閱者是 Microsoft SQL Server 7.0 或更新版本,則會從發行者、散發者和訂閱者收集推送訂閱的追蹤令牌統計數據。

  • 針對提取訂閱,只有在訂閱者是 SQL Server 2005 或更新版本時,才會從訂閱者收集追蹤令牌統計數據。 如果訂閱者是 SQL Server 7.0 或Microsoft SQL Server 2000,則只會從發行者和散發者收集統計數據。

另外還有一些其他問題和限制要注意:

  • 訂閱必須處於有效狀態,才能接收追蹤令牌。 訂閱在初始化後即為活躍狀態。

  • 重新初始化會移除相應訂用帳戶的任何擱置的追蹤令牌。

  • 訂閱者只會接收在初始同步處理之後建立的追蹤令牌。

  • 重新發布的訂閱者不會轉送追蹤令牌。

  • 故障轉移到次要伺服器後,Replication Monitor 無法調整作為發行者的 SQL Server 實例名稱,並將繼續在原始主伺服器名稱下顯示複製資訊。 在容錯移轉之後,便無法使用複寫監視器輸入追蹤 Token,但是可以在複寫監視器中看到在新發行者端使用 Transact-SQL 輸入的追蹤 Token。

使用 SQL Server 複寫監視器

如需啟動複寫監視器的詳細資訊,請參閱啟動複寫監視器

插入追蹤令牌並檢視令牌的相關信息

  1. 展開左窗格中的出版者群組,展開出版者,然後按一下出版物。

  2. 按一下 [追蹤令牌] 索引標籤

  3. 按兩下 [插入追蹤]。

  4. 在下列數據行中檢視追蹤令牌的經過時間: 發行者到散發者散發者到訂閱者總延遲[擱置] 的值表示令牌尚未到達指定點。

檢視先前所插入追蹤令牌的詳細資訊

  1. 展開左窗格中的出版者群組,展開出版者,然後按一下出版物。

  2. 按一下 [追蹤令牌] 索引標籤

  3. [插入的時間 ] 下拉式清單中選取時間。

  4. 在下列數據行中檢視追蹤令牌的經過時間: 發行者到散發者散發者到訂閱者總延遲[擱置] 的值表示令牌尚未到達指定點。

    備註

    追蹤令牌資訊會保留與其他歷程記錄數據相同的時間週期,此數據由散發資料庫的歷程記錄保留期間所控管。 如需變更散發資料庫屬性的資訊,請參閱 檢視和修改散發者和發行者屬性

使用 Transact-SQL

將追蹤令牌張貼至交易式發行集

  1. 在發行資料庫的發行伺服器上(選擇性),執行 sp_helppublication(Transact-SQL) 。 確認出版物存在,且狀態為啟用中。

  2. (選擇性)在出版資料庫的 Publisher 上,執行 sp_helpsubscription (Transact-SQL)。 確認訂用帳戶存在,且狀態為作用中。

  3. 在發行資料庫的發行者端,執行 sp_posttracertoken(Transact-SQL),並指定 @publication。 請注意 輸出參數@tracer_token_id 的值。

判斷交易式發行集的延遲和驗證連接

  1. 使用上一個程序將追蹤令牌發佈。

  2. 在發行者的發行集資料庫內,執行 sp_helptracertokens(Transact-SQL) 並指定 @publication。 這會回傳張貼至出版物的所有追蹤標記清單。 請注意結果集中所期望的 tracer_id

  3. 在發行資料庫的發行者上,執行 sp_helptracertokenhistory (Transact-SQL),然後針對 @publication 和步驟 2 中的追蹤令牌標識碼 @tracer_id 進行指定。 這會傳回所選追蹤令牌的延遲資訊。

移除追蹤令牌

  1. 在發行者的發行集資料庫上,執行 sp_helptracertokens (Transact-SQL),並指定 @publication。 這將傳回所有發佈到出版物的追蹤令牌清單。 請注意結果集中要刪除的追蹤令牌 tracer_id

  2. 在發行者的發行集資料庫中,執行 sp_deletetracertokenhistory (Transact-SQL),指定要刪除的追蹤@tracer_id和步驟 2 中的追蹤標識碼@publication

範例 (Transact-SQL)

此範例會張貼追蹤令牌記錄,並使用所張貼追蹤令牌的傳回標識符來檢視延遲資訊。

DECLARE @publication AS sysname;
DECLARE @tokenID AS int;
SET @publication = N'AdvWorksProductTran'; 

USE [AdventureWorks2012]

-- Insert a new tracer token in the publication database.
EXEC sys.sp_posttracertoken 
  @publication = @publication,
  @tracer_token_id = @tokenID OUTPUT;
SELECT 'The ID of the new tracer token is ''' + 
    CONVERT(varchar,@tokenID) + '''.'
GO

-- Wait 10 seconds for the token to make it to the Subscriber.
WAITFOR DELAY '00:00:10';
GO

-- Get latency information for the last inserted token.
DECLARE @publication AS sysname;
DECLARE @tokenID AS int;
SET @publication = N'AdvWorksProductTran'; 

CREATE TABLE #tokens (tracer_id int, publisher_commit datetime)

-- Return tracer token information to a temp table.
INSERT #tokens (tracer_id, publisher_commit)
EXEC sys.sp_helptracertokens @publication = @publication;
SET @tokenID = (SELECT TOP 1 tracer_id FROM #tokens
ORDER BY publisher_commit DESC)
DROP TABLE #tokens

-- Get history for the tracer token.
EXEC sys.sp_helptracertokenhistory 
  @publication = @publication, 
  @tracer_id = @tokenID;
GO

使用 Replication Management Objects (RMO)

將追蹤令牌發布至交易式出版物

  1. 使用 ServerConnection 類別建立與發行者的連接。

  2. 建立 TransPublication 類別的執行個體。

  3. 設定出版物的 NameDatabaseName 屬性,並將 ConnectionContext 屬性設定為步驟 1 中建立的連接。

  4. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳 false回 ,則表示步驟 3 中的發行集屬性定義不正確或發行集不存在。

  5. 呼叫 PostTracerToken 方法。 這個方法會將追蹤令牌插入出版物的交易日志中。

判斷交易式發行集的延遲和驗證連接

  1. 使用 ServerConnection 類別建立與散發者的連接。

  2. 建立 PublicationMonitor 類別的執行個體。

  3. 設定 NameDistributionDBNamePublisherNamePublicationDBName 屬性,並將屬性設定 ConnectionContext 為步驟 1 中建立的連接。

  4. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳 false回 ,則表示步驟 3 中的發行集監視器屬性定義不正確或發行集不存在。

  5. 呼叫 EnumTracerTokens 方法。 將返回的 ArrayList 物件轉換成 TracerToken 物件的陣列。

  6. 呼叫 EnumTracerTokenHistory 方法。 從步驟 5 傳遞追蹤令牌的 值 TracerTokenId 。 這會以物件的形式傳回所選取追蹤令牌的 DataSet 延遲資訊。 如果傳回所有追蹤令牌資訊,則發行者與散發者以及散發者與訂閱者之間的連接皆存在,且復寫拓撲正在運作。

移除追蹤令牌

  1. 使用 ServerConnection 類別建立與散發者的連接。

  2. 建立 PublicationMonitor 類別的執行個體。

  3. 設定 NameDistributionDBNamePublisherNamePublicationDBName 屬性,並將屬性設定 ConnectionContext 為步驟 1 中建立的連接。

  4. 呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳 false回 ,則表示步驟 3 中的發行集監視器屬性定義不正確或發行集不存在。

  5. 呼叫 EnumTracerTokens 方法。 將返回的 ArrayList 物件轉換成 TracerToken 物件的陣列。

  6. 呼叫 CleanUpTracerTokenHistory 方法。 傳遞下列其中一個值:

    • 步驟 5 中追蹤權杖的TracerTokenId。 這會刪除所選令牌的資訊。

    • DateTime 物件。 這會刪除超過指定日期和時間的所有令牌資訊。