Назад | Перейти на главную страницу

Мониторинг издателей репликации SQL от подписчика

У меня есть репликация транзакций со многими издателями (50+) и одним центральным подписчиком (сбор данных). Есть ли способ (функция SQL-сервера, сторонний инструмент), как отслеживать все публикации из одной точки, в идеале от центрального подписчика? (Что-то вроде сервера мониторинга с несколькими публикациями с монитором репликации)

Спасибо

Да, есть. Я делаю это так: у меня есть токены трассировщика сообщений о вакансиях агента SQL, которые отправляются издателям через регулярные промежутки времени, а затем я отслеживаю их продвижение от дистрибьютора (где хранится их история). Я создал представление в базе данных распространителя, которое помогает в этом.

USE [distribution]
GO

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[tokens]'))
    DROP VIEW [dbo].[tokens]
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

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

Я оставляю читателю в качестве упражнения превратить это в мониторинг. Я бы дал вам то, что у меня есть, но недавно понял, что в нем есть ошибка. Но о чем нужно помнить:

  • Возможно, у данного издателя не было размещенных токенов в тот период времени, который вы ищете. Это должно быть отмечено
  • В качестве меры задержки вы хотите, чтобы время publisher_commit для последнего токена было передано подписчику.

Удачи!