Улучшение репликации SQL Server - динамическая перезагрузка параметров профиля агента
С третьим накопительным обновлением SQL Server 2017 Microsoft представила усовершенствование репликации SQL Server, в котором изменения параметров агента репликации можно перезагрузить динамически, без необходимости перезапуска агента. Это улучшение будет доступно в следующих обновлениях для SQL Server 2016 и SQL Server 2014.
Динамическая перезагрузка параметров агента
Репликация использует несколько автономных программ, называемых агентами, для выполнения задач, связанных с отслеживанием изменений и распространением данных. Например, агент чтения журнала, используемый с транзакционной репликацией, переносит транзакции, помеченные для репликации из журнала транзакций публикатора в базу данных распространения. Каждая база данных, опубликованная с использованием транзакционной репликации, имеет свой собственный агент чтения журнала, который работает на распространителе и подключается к публикатору.
Когда репликация используется в системах с высоким уровнем трафика с большим количеством операций DML, клиентам часто приходится настраивать профили агентов по умолчанию, чтобы увеличить пропускную способность агентов репликации, что позволяет не отставать от входящей нагрузки. Чтобы эти изменения вступили в силу, выполняется следующая последовательность шагов:
- Найдите все нуждающиеся в изменении агенты и соответствующие им задания. Это очень сложно и требует много времени, особенно если у нас есть несколько публикаций и подписок.
- Отключите задания, соответствующие агентам.
- Остановите агент (прекратите выполнение заданий, если они все еще запущены).
- Измените настройки профиля.
- Восстановить задания, связанные с затронутыми агентами.
- Запустите агентов
Иногда этот алгоритм нужно повторять несколько раз для правильной комбинации параметров агента, что может быть утомительным и трудоемким. Новое усовершенствование репликации позволяет пользователям динамически изменять параметры профиля агента без перезапуска агентов. В настоящее время можно динамически перезагрузить следующие параметры.
Агент чтения журнала - Output, OutputVerboseLevel, PollingInterval, ReadBatchSize, ReadBatchThreshold
Агент распространения – CommitBatchSize, CommitBatchThreshold, MaxDeliveredTransactions, PollingInterval, Output, OutputVerboseLevel, SubscriptionStreams.
Как это работает
Когда новый профиль агента пользователя создается и присваивается агенту соответствующие записи добавляются в таблицы [dbo]. [MSagent_profiles] и [dbo]. [MSagent_parameters] в базе данных MSDB на сервере распространителя. Значения в таблицах обновляются каждый раз, когда значение параметра обновляется для профиля. Эти значения перезагружаются из таблиц всякий раз, когда перезапускается агент репликации. В качестве дополнения к профилю был добавлен новый параметр «ProfileReloadInterval», чье значение по умолчанию составляет 300 секунд. Этот параметр определяет интервал, при котором агент перезагружает значения из таблиц. При использовании значения по умолчанию агент будет пытаться перезагружать значения из таблиц MSDB каждые 5 минут. Если он обнаруживает, что любое из вышеупомянутых значений параметров изменилось, он начнет использовать новые значения.
Изменение значений параметров профиля
Значения могут быть изменены с помощью SQL Server Management Studio или с помощью хранимой процедуры sp_change_agent_parameters. Начиная с SQL Server Management Studio 18.0, пользовательский интерфейс профиля агента имеет дополнительный столбец с именем «Reloadable», указывающий, может ли указанный параметр перезагружаться динамически.
При изменении параметра и динамической перезагрузке в зафиксированные журналы агента репликации добавляется соответствующая информация. Например, в приведенном ниже фрагменте мы видим, что значение «ReadBatchSize» было изменено с 5000 на 500, без необходимости перезапуска агента.
2018-02-24 07:45:30.213 Publisher: {call sp_replcmds (5000, 0, 0, , 5047, 500000)}
2018-02-24 07:45:35.264 Publisher: {call sp_replcmds (5000, 0, 0, , 5047, 500000)}
2018-02-24 07:45:39.939 OLE DB DistLog 'CAPTAINAMERICA': exec sp_MShelp_logreader_agentid 2, N'WideWorldImporters'
2018-02-24 07:45:40.020 OLE DB DistLog 'CAPTAINAMERICA': exec sp_MShelp_profile 2, 2, N'testProfile'
2018-02-24 07:45:40.324 Status: 4, code: 20085, text: 'The agent parameter '-ReadBatchSize' with value 500 is taking effect.'.
2018-02-24 07:45:40.507 Publisher: {call sp_replcmds (500, 0, 0, , 5250, 500000)}
2018-02-24 07:45:45.566 Publisher: {call sp_replcmds (500, 0, 0, , 5234, 500000)}