本主題描述如何使用複寫監視器、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 複寫監視器
如需啟動複寫監視器的詳細資訊,請參閱啟動複寫監視器。
插入追蹤令牌並檢視令牌的相關信息
展開左窗格中的出版者群組,展開出版者,然後按一下出版物。
按一下 [追蹤令牌] 索引標籤。
按兩下 [插入追蹤]。
在下列數據行中檢視追蹤令牌的經過時間: 發行者到散發者、 散發者到訂閱者、 總延遲。 [擱置] 的值表示令牌尚未到達指定點。
檢視先前所插入追蹤令牌的詳細資訊
展開左窗格中的出版者群組,展開出版者,然後按一下出版物。
按一下 [追蹤令牌] 索引標籤。
從 [插入的時間 ] 下拉式清單中選取時間。
在下列數據行中檢視追蹤令牌的經過時間: 發行者到散發者、 散發者到訂閱者、 總延遲。 [擱置] 的值表示令牌尚未到達指定點。
備註
追蹤令牌資訊會保留與其他歷程記錄數據相同的時間週期,此數據由散發資料庫的歷程記錄保留期間所控管。 如需變更散發資料庫屬性的資訊,請參閱 檢視和修改散發者和發行者屬性。
使用 Transact-SQL
將追蹤令牌張貼至交易式發行集
在發行資料庫的發行伺服器上(選擇性),執行 sp_helppublication(Transact-SQL) 。 確認出版物存在,且狀態為啟用中。
(選擇性)在出版資料庫的 Publisher 上,執行 sp_helpsubscription (Transact-SQL)。 確認訂用帳戶存在,且狀態為作用中。
在發行資料庫的發行者端,執行 sp_posttracertoken(Transact-SQL),並指定 @publication。 請注意 輸出參數@tracer_token_id 的值。
判斷交易式發行集的延遲和驗證連接
使用上一個程序將追蹤令牌發佈。
在發行者的發行集資料庫內,執行 sp_helptracertokens(Transact-SQL) 並指定 @publication。 這會回傳張貼至出版物的所有追蹤標記清單。 請注意結果集中所期望的 tracer_id 。
在發行資料庫的發行者上,執行 sp_helptracertokenhistory (Transact-SQL),然後針對 @publication 和步驟 2 中的追蹤令牌標識碼 @tracer_id 進行指定。 這會傳回所選追蹤令牌的延遲資訊。
移除追蹤令牌
在發行者的發行集資料庫上,執行 sp_helptracertokens (Transact-SQL),並指定 @publication。 這將傳回所有發佈到出版物的追蹤令牌清單。 請注意結果集中要刪除的追蹤令牌 tracer_id。
在發行者的發行集資料庫中,執行 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)
將追蹤令牌發布至交易式出版物
使用 ServerConnection 類別建立與發行者的連接。
建立 TransPublication 類別的執行個體。
設定出版物的 Name 和 DatabaseName 屬性,並將 ConnectionContext 屬性設定為步驟 1 中建立的連接。
呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳
false回 ,則表示步驟 3 中的發行集屬性定義不正確或發行集不存在。呼叫 PostTracerToken 方法。 這個方法會將追蹤令牌插入出版物的交易日志中。
判斷交易式發行集的延遲和驗證連接
使用 ServerConnection 類別建立與散發者的連接。
建立 PublicationMonitor 類別的執行個體。
設定 Name、 DistributionDBName、 PublisherName和 PublicationDBName 屬性,並將屬性設定 ConnectionContext 為步驟 1 中建立的連接。
呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳
false回 ,則表示步驟 3 中的發行集監視器屬性定義不正確或發行集不存在。呼叫 EnumTracerTokens 方法。 將返回的 ArrayList 物件轉換成 TracerToken 物件的陣列。
呼叫 EnumTracerTokenHistory 方法。 從步驟 5 傳遞追蹤令牌的 值 TracerTokenId 。 這會以物件的形式傳回所選取追蹤令牌的 DataSet 延遲資訊。 如果傳回所有追蹤令牌資訊,則發行者與散發者以及散發者與訂閱者之間的連接皆存在,且復寫拓撲正在運作。
移除追蹤令牌
使用 ServerConnection 類別建立與散發者的連接。
建立 PublicationMonitor 類別的執行個體。
設定 Name、 DistributionDBName、 PublisherName和 PublicationDBName 屬性,並將屬性設定 ConnectionContext 為步驟 1 中建立的連接。
呼叫 LoadProperties 方法以取得物件的屬性。 如果此方法傳
false回 ,則表示步驟 3 中的發行集監視器屬性定義不正確或發行集不存在。呼叫 EnumTracerTokens 方法。 將返回的 ArrayList 物件轉換成 TracerToken 物件的陣列。
呼叫 CleanUpTracerTokenHistory 方法。 傳遞下列其中一個值:
步驟 5 中追蹤權杖的TracerTokenId。 這會刪除所選令牌的資訊。
DateTime 物件。 這會刪除超過指定日期和時間的所有令牌資訊。