Измерение задержки и проверка правильности соединений для репликации транзакций
Область применения: 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 и будет продолжать отображать сведения о репликации под именем исходного первичного экземпляра SQL Server. После отработки отказа нельзя ввести трассировочный токен с помощью монитора репликации, но трассировочный токен, введенный в новый издатель с помощью Transact-SQL, отображается в мониторе репликации.
При помощи монитора репликации SQL Server
Сведения о запуске монитора репликации см. в этой статье.
Вставка трассировочного токена и просмотр сведений о токене
Раскройте на левой панели группу издателей, раскройте издатель и выберите нужную публикацию.
Щелкните вкладку Трассировочные токены .
Выберите команду Вставить трассировочный маркер.
Просмотрите затраченное время для трассировочного маркера в следующих столбцах: От издателя к распространителю, От распространителя к подписчику, Общая задержка. Значение Ожидание указывает на то, что токен еще не достиг указанной точки.
Просмотр сведений о трассировочном токене, вставленном ранее
Раскройте на левой панели группу издателей, раскройте издатель и выберите нужную публикацию.
Щелкните вкладку Трассировочные токены .
Выберите время в раскрывающемся списке Время вставки .
Просмотрите затраченное время для трассировочного маркера в следующих столбцах: От издателя к распространителю, От распространителя к подписчику, Общая задержка. Значение Ожидание указывает на то, что токен еще не достиг указанной точки.
Примечание.
Данные трассировочных токенов хранятся в течение того же периода времени, что и другие данные предыстории; этот период определяется сроком хранения журнала в базе данных распространителя. Дополнительные сведения о доступе к этим диалоговым окнам см. в статье Просмотр и изменение свойств издателя и распространителя.
Использование Transact-SQL
Отправка трассировочного токена в публикацию транзакций
(Необязательно) На издателе в базе данных публикации выполните sp_helppublication (Transact-SQL). Удостоверьтесь в том, что публикация существует и находится в активном состоянии.
(Необязательно) На издателе в базе данных публикации выполните sp_helpsubscription (Transact-SQL). Удостоверьтесь в том, что подписка существует и находится в активном состоянии.
На издателе в базе данных публикации выполните sp_posttracertoken (Transact-SQL), указав @publication. Запомните значение выходного параметра @tracer_token_id .
Измерение задержки и проверка соединений для публикации транзакций
Передайте трассировочный токен в публикацию при помощи описанной выше процедуры.
На издателе в базе данных публикации выполните sp_helptracertokens (Transact-SQL), указав @publication. Будет возвращен список всех трассировочных токенов, опубликованных для публикации. Запомните нужное значение tracer_id в результирующем наборе.
На издателе в базе данных публикации выполните sp_helptracertokenhistory (Transact-SQL), указав @publication и идентификатор маркера трассировки из шага 2 для @tracer_id. В результате этого будут возвращены сведения о задержке для выделенного трассировочного токена.
Удаление трассировочных токенов
На издателе в базе данных публикации выполните sp_helptracertokens (Transact-SQL), указав @publication. Будет возвращен список всех трассировочных токенов, опубликованных для публикации. Запомните нужное значение tracer_id в результирующем наборе для удаляемого трассировочного токена.
На издателе в базе данных публикации выполните 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
Отправка трассировочного токена в публикацию транзакций
Создайте соединение с издателем с помощью класса ServerConnection .
Создайте экземпляр класса TransPublication.
Задайте для публикации свойства Name и DatabaseName , а также установите созданное на шаге 1 соединение ConnectionContext в качестве значения для свойства.
Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает false, то либо на шаге 3 были неверно определены свойства публикации, либо публикация не существует.
Вызовите метод PostTracerToken . Этот метод обеспечивает вставку трассировочного токена в журнал транзакций публикации.
Измерение задержки и проверка соединений для публикации транзакций
Создайте соединение с распространителем с помощью класса ServerConnection .
Создайте экземпляр класса PublicationMonitor.
Установите свойства Name, DistributionDBName, PublisherNameи PublicationDBName , а в качестве значения свойства ConnectionContext установите созданное на шаге 1 соединение.
Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает false, то либо на шаге 3 были неверно определены свойства монитора публикации, либо публикация не существует.
Вызовите метод EnumTracerTokens . Приведите возвращенный объект ArrayList к типу массива объектов TracerToken .
Вызовите метод EnumTracerTokenHistory . Передайте значение TracerTokenId для трассировочного токена, полученного на шаге 5. В результате будут возвращены сведения о задержке для выделенного трассировочного токена в виде объекта DataSet . Если возвращены все сведения о трассировочном токене, то существует соединение между издателем и распространителем, а также соединение между распространителем и подписчиком, и топология репликации работоспособна.
Удаление трассировочных токенов
Создайте соединение с распространителем с помощью класса ServerConnection .
Создайте экземпляр класса PublicationMonitor.
Установите свойства Name, DistributionDBName, PublisherNameи PublicationDBName , а в качестве значения свойства ConnectionContext установите созданное на шаге 1 соединение.
Чтобы получить свойства объекта, вызовите метод LoadProperties . Если этот метод возвращает false, то либо на шаге 3 были неверно определены свойства монитора публикации, либо публикация не существует.
Вызовите метод EnumTracerTokens . Приведите возвращенный объект ArrayList к типу массива объектов TracerToken .
Вызовите метод CleanUpTracerTokenHistory . Передайте одно из следующих значений.
Значение TracerTokenId для трассировочного токена, полученного на шаге 5. В результате этого сведения для выделенного токена будут удалены.
Объект DateTime. В результате этого будут удалены сведения обо всех токенах, созданных до наступления указанного момента времени.