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

Применимо к:SQL Server Управляемый экземпляр SQL Azure

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

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

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

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

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

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

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

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

Ограничения

Трассировочные токены также могут быть полезны при «замораживании» системы, когда останавливаются все действия и проверяется получение всеми узлами всех необработанных изменений. Дополнительные сведения см. в статье Заморозить топологию репликации (программирование репликации на языке Transact-SQL).

Чтобы использовать маркеры трассировки, необходимо использовать определенные версии Microsoft SQL Server:

  • Распространитель должен быть Microsoft SQL Server 2005 (9.x) или более поздней версии.

  • Издатель должен быть SQL Server 2005 (9.x) или более поздней версии или быть издателем Oracle.

  • Для push-подписок статистика маркеров трассировки собирается от издателя, распространителя и подписчиков, если подписчик — Microsoft SQL Server 7.0 или более поздней версии.

  • Для подписок на вытягивание статистика маркеров трассировки собирается от подписчиков только в том случае, если подписчик — SQL Server 2005 (9.x) или более поздней версии. Если подписчиком является SQL Server 7.0 или Microsoft SQL Server 2000 (8.x), статистика собирается только от издателя и распространителя.

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

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

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

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

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

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

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

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

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

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

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

  3. Выберите команду Вставить трассировочный маркер.

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

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

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

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

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

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

    Примечание.

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

Использование 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 [AdventureWorks2022]

-- 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

При помощи объектов 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. В результате этого будут удалены сведения обо всех токенах, созданных до наступления указанного момента времени.