如何在SQL Server中找到复制延迟?

时间:2015-01-13 08:41:48

标签: sql-server database-replication

在MYSQL服务器中,通过查看“second behind master”的值,可以知道从服务器滞后于其主服务器的程度。那么,在MSSQL中是否有类似于它的东西,以便可以知道从属服务器如何被其主服务器滞后?

1 个答案:

答案 0 :(得分: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计数器。根据我的经验,他们并不那么伟大;未完成命令的数量是准确的数字,但延迟的持续时间测量通常非常不准确。