Измерение задержки и проверка правильности соединений для репликации транзакций
В данном разделе описывается измерение задержки и проверка соединений для репликации транзакций в 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
Сведения о запуске монитора репликации см. в разделе Запуск монитора репликации.
Вставка трассировочного токена и просмотр сведений о токене
Раскройте на левой панели группу издателей, раскройте издатель и выберите нужную публикацию.
Щелкните вкладку Трассировочные токены.
Щелкните Вставить трассировочный маркер.
Просмотрите затраченное время для трассировочного токена в следующих столбцах: От издателя к распространителю, От распространителя к подписчику, Общая задержка. Значение Ожидание указывает на то, что токен не достиг указанной точки.
Просмотр сведений о трассировочном токене, вставленном ранее
Раскройте на левой панели группу издателей, раскройте издатель и выберите нужную публикацию.
Щелкните вкладку Трассировочные токены.
Выберите время в раскрывающемся списке Время вставки.
Просмотрите затраченное время для трассировочного токена в следующих столбцах: От издателя к распространителю, От распространителя к подписчику, Общая задержка. Значение Ожидание указывает на то, что токен не достиг указанной точки.
Примечание Данные трассировочных токенов хранятся в течение того же периода времени, что и другие данные предыстории; этот период определяется сроком хранения журнала в базе данных распространителя. Дополнительные сведения об изменении свойств базы данных распространителя см. в разделе Просмотр и изменение свойств издателя и распространителя.
[Top]
Использование 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 [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
Отправка трассировочного токена в публикацию транзакций
Создайте соединение с издателем с помощью класса 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. В результате этого будут удалены сведения обо всех токенах, созданных до наступления указанного момента времени.
[Top]