Измерение задержки и проверка правильности соединений для репликации транзакций

В данном разделе описывается измерение задержки и проверка соединений для репликации транзакций в SQL Server 2012 с помощью монитора репликации, Transact-SQL или объектов RMO. Репликация транзакций предоставляет функцию трассировочных токенов, которая обеспечивает удобный способ измерения длительности задержки в топологиях репликации транзакций и помогает проверять соединения между издателем, распространителем и подписчиками. Токен (небольшая порция данных) записывается в журнал транзакций базы данных публикации, помечается, как обычная реплицированная транзакция, и пересылается через систему, позволяя вычислять следующие параметры:

  • Время, прошедшее между фиксацией транзакции на издателе и вставкой соответствующей команды в базу данных распространителя на распространителе.

  • Время, прошедшее между вставкой команды в базу данных распространителя и соответствующей транзакцией, зафиксированной у подписчика.

Из этих вычислений можно получить ответы на следующие вопросы:

  • Какой подписчик позднее всех получает изменения от издателя?

  • Какие подписчики, ожидающие получения трассировочного токена, его не получили (если таковые имеются)?

В этом разделе

  • Перед началом работы выполните следующие действия.

    Ограничения

  • Для измерения задержки и проверки соединений используется:

    Монитор репликации SQL Server

    Transact-SQL

    Объекты RMO

Перед началом

Ограничения

Трассировочные токены также могут быть полезны при «замораживании» системы, когда останавливаются все действия и проверяется получение всеми узлами всех необработанных изменений. Дополнительные сведения см. в разделе заморозить топологию репликации (программирование репликации на языке 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, то статистика собирается только с издателя и распространителя.

Следует также учитывать ряд других вопросов и ограничений:

  • Подписки должны быть активными, чтобы получать трассировочный токен. Подписка является активной, если она инициализирована.

  • При повторной инициализации удаляются все отложенные трассировочные токены для соответствующих подписок.

  • Подписчики получают только трассировочные токены, созданные после их исходной синхронизации.

  • Трассировочные токены не пересылаются переиздающими подписчиками.

  • После отработки отказа на вторичной реплике монитор репликации не сможет изменить имя экземпляра публикации SQL Server и будет продолжать отображать сведения о репликации по имени исходного первичного экземпляра SQL Server. После отработки отказа нельзя ввести трассировочный токен с помощью монитора репликации, но трассировочный токен, введенный в новый издатель с помощью Transact-SQL, отображается в мониторе репликации.

Значок стрелки, используемый со ссылкой «В начало»[Top]

При помощи монитора репликации SQL Server

Сведения о запуске монитора репликации см. в разделе Запуск монитора репликации.

Вставка трассировочного токена и просмотр сведений о токене

  1. Раскройте на левой панели группу издателей, раскройте издатель и выберите нужную публикацию.

  2. Щелкните вкладку Трассировочные токены.

  3. Щелкните Вставить трассировочный маркер.

  4. Просмотрите затраченное время для трассировочного токена в следующих столбцах: От издателя к распространителю, От распространителя к подписчику, Общая задержка. Значение Ожидание указывает на то, что токен не достиг указанной точки.

Просмотр сведений о трассировочном токене, вставленном ранее

  1. Раскройте на левой панели группу издателей, раскройте издатель и выберите нужную публикацию.

  2. Щелкните вкладку Трассировочные токены.

  3. Выберите время в раскрывающемся списке Время вставки.

  4. Просмотрите затраченное время для трассировочного токена в следующих столбцах: От издателя к распространителю, От распространителя к подписчику, Общая задержка. Значение Ожидание указывает на то, что токен не достиг указанной точки.

    ПримечаниеПримечание

    Данные трассировочных токенов хранятся в течение того же периода времени, что и другие данные предыстории; этот период определяется сроком хранения журнала в базе данных распространителя. Дополнительные сведения об изменении свойств базы данных распространителя см. в разделе Просмотр и изменение свойств издателя и распространителя.

Значок стрелки, используемый со ссылкой «В начало»[Top]

Использование Transact-SQL

Отправка трассировочного токена в публикацию транзакций

  1. В базе данных публикации на издателе выполните процедуру sp_helppublication (Transact-SQL) (необязательно). Удостоверьтесь в том, что публикация существует и находится в активном состоянии.

  2. В базе данных публикации на издателе выполните процедуру 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), указав аргумент @publication, а также идентификатор удаляемого трассировочного маркера, полученного на шаге 2, в параметре @tracer_id.

Пример (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

Значок стрелки, используемый со ссылкой «В начало»[Top]

При помощи объектов RMO

Отправка трассировочного токена в публикацию транзакций

  1. Создайте соединение с издателем с помощью класса ServerConnection.

  2. Создайте экземпляр класса TransPublication.

  3. Задайте для публикации свойства Name и DatabaseName, а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства.

  4. Чтобы получить свойства объекта, вызовите метод LoadProperties. Если этот метод возвращает false, то либо на шаге 3 были неверно определены свойства публикации, либо публикация не существует.

  5. Вызовите метод PostTracerToken. Этот метод обеспечивает вставку трассировочного токена в журнал транзакций публикации.

Измерение задержки и проверка соединений для публикации транзакций

  1. Создайте соединение с распространителем с помощью класса ServerConnection.

  2. Создайте экземпляр класса PublicationMonitor.

  3. Установите свойства Name, DistributionDBName, PublisherName и PublicationDBName, а в качестве значения свойства ConnectionContext установите созданное на шаге 1 соединение.

  4. Чтобы получить свойства объекта, вызовите метод LoadProperties. Если этот метод возвращает false, то либо на шаге 3 были неверно определены свойства монитора публикации, либо публикация не существует.

  5. Вызовите метод EnumTracerTokens. Приведите возвращенный объект ArrayList к типу массива объектов TracerToken.

  6. Вызовите метод EnumTracerTokenHistory. Передайте значение TracerTokenID для трассировочного токена, полученного на шаге 5. В результате будут возвращены сведения о задержке для выделенного трассировочного токена в виде объекта DataSet. Если возвращены все сведения о трассировочном токене, то существует соединение между издателем и распространителем, а также соединение между распространителем и подписчиком, и топология репликации работоспособна.

Удаление трассировочных токенов

  1. Создайте соединение с распространителем с помощью класса ServerConnection.

  2. Создайте экземпляр класса PublicationMonitor.

  3. Установите свойства Name, DistributionDBName, PublisherName и PublicationDBName, а в качестве значения свойства ConnectionContext установите созданное на шаге 1 соединение.

  4. Чтобы получить свойства объекта, вызовите метод LoadProperties. Если этот метод возвращает false, то либо на шаге 3 были неверно определены свойства монитора публикации, либо публикация не существует.

  5. Вызовите метод EnumTracerTokens. Приведите возвращенный объект ArrayList к типу массива объектов TracerToken.

  6. Вызовите метод CleanUpTracerTokenHistory. Передайте одно из следующих значений.

    • Значение TracerTokenID для трассировочного токена, полученного на шаге 5. В результате этого сведения для выделенного токена будут удалены.

    • Объект DateTime. В результате этого будут удалены сведения обо всех токенах, созданных до наступления указанного момента времени.

Значок стрелки, используемый со ссылкой «В начало»[Top]