2015-01-13 45 views
0

在MYSQL服務器中,通過查看「第二位主服務器」的值,可以知道從服務器與主服務器的差距。那麼,MSSQL中是否有類似的東西,這樣就可以知道從服務器如何落後於其主服務器?如何在SQL Server中查找複製延遲?

+0

我認爲,您將在[數據庫管理員StackExchange站點](http://dba.stackexchange.com/help/on-topic)上獲得更多運氣。您可以通過標記「管理員注意力」來讓管理員遷移您的問題。 – Pred

回答

0

在這個問題上有一些爭議,但我喜歡定期使用貼圖示蹤標記。也就是說,您可以在發佈服務器上調用sp_posttracertoken過程,並且它會一直髮送一個令牌給訂閱者。您可以在分銷商數據庫中查看所有令牌的歷史記錄。我寫了下面的觀點,使數據更容易溝谷:

create view [dbo].[tokens] as 
select 
    ps.name as [publisher], 
    p.publisher_db, 
    p.publication, 
    ss.name as [subscriber], 
    da.subscriber_db, 
    t.publisher_commit, 
    t.distributor_commit, 
    h.subscriber_commit, 
    datediff(second, t.publisher_commit, t.distributor_commit) as [pub to dist (s)], 
    datediff(second, t.distributor_commit ,h.subscriber_commit) as [dist to sub (s)], 
    datediff(second, t.publisher_commit, h.subscriber_commit) as [total latency (s)] 
from mstracer_tokens t 
inner join MStracer_history h 
    on t.tracer_id = h.parent_tracer_id 
inner join mspublications p 
    on p.publication_id = t.publication_id 
inner join sys.servers ps 
    on p.publisher_id = ps.server_id 
inner join msdistribution_agents da 
    on h.agent_id = da.id 
inner join sys.servers ss 
    on da.subscriber_id = ss.server_id 

另一種方法是使用什麼是通常稱爲金絲雀表。這個想法是,你有一個專門用於監視複製的表,通常只有一行帶有日期時間字段。您在發佈商處更新專欄,然後通過查看訂閱者該專欄的價值來監控訂閱者距離多遠。

最後,有一些perfmon計數器,你可以看看。根據我的經驗,他們並不那麼棒。未完成命令的數量是準確的數字,但延遲作爲持續時間的度量通常非常不準確。