Новое в SSMS: отчет о задержках групп доступности AlwaysOn

Tags: SSMS, SQL, SQL Server, SQL Server 2017, SQL Server 2016

В SQL Server 2012 были представлены группы доступности AlwaysOn и панель инструментов групп доступности AlwaysOn в SQL Server Management Studio (SSMS). Эта панель инструментов может использоваться администраторами баз данных для просмотра текущего состояния группы доступности и ее реплик доступности и баз данных. Хотя панель управления может быть настроена для предоставления информации о задержках между первичной и вторичной репликами (может быть рассчитана с использованием значений Commit LSN, Sent LSN и harden LSN), это не дает понимания причины задержки. Чтобы понять причину задержки, требуется захват и анализ счетчиков расширенных событий и производительности. Эта деятельность может занять много времени и требует обширных знаний о расширенных событиях, связанных с Always On.

С выпуском новой версии SSMS 17.4  Microsoft представляет функцию сбора данных о задержках групп доступности (Latency) и отчетность, встроенную в панель инструментов групп доступности. Эта функция маскирует захват и анализ расширенных событий от конечного пользователя и предоставляет простой для понимания отчет, в котором подробно описывается время, затрачиваемое на разных этапах процесса LogTransport (переноса журнала) .

Для чего нужна эта функция?

Функция сбора данных Latency и связанные с ней отчеты позволяют администратору базы данных быстро распознавать узкое место в потоке переноса журнала между первичной и вторичной репликами группы доступности. Эта функция НЕ отвечает на вопрос «Существует ли задержка при развертывании группы доступности?» а скорее дает возможность понять причину задержки в развертывании группы доступности. Эта функциональность дает возможность сузить потенциальную причину задержки при развертывании группы доступности.

Как это работает?

Как видно ниже, доступ к функциям сбора данных о задержках групп доступности можно получить из панели групп доступности.

Когда администратор нажимает на ссылку «Collect Latency Data» («Сбор данных о задержках»), SSMS связывается со всеми репликами в доступности и выполняет следующие задачи.

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

2. Создает задание агента SQL с именем «AlwaysOn_Latency_Data_Collection». Это задание имеет 7 шагов:

  1. Сбор данных о группе доступности. Эти данные сохраняются (до следующего перезапуска SQL Server или следующего выполнения задания) в таблице «AGInfo» в базе данных TempDB.
  2. Создание Сеанса расширенных событий для сбора данных группы доступности на реплике
  3. Ожидание завершения расширенного события. В настоящее время  Microsoft проводит сбор продолжительностью 2 минуты. Хотя эту продолжительность можно изменить,  Microsoft не рекомендует пользователям изменять это значение. Изменение продолжительности влияет на время, в течение которого выполняется сеанс расширенного события (и собираемые данные), и будет иметь прямое влияние на последующую фазу извлечения данных.
  4. Завершение сеанса расширенного события
  5. Извлечение данные XML из сеанса расширенного события во временную таблицу и последующий анализ информации о событиях XML в таблице «DMReplicaEvents» в базе данных TempDB
  6. Заполнение результатов, установленных для отчетов Latency.
  7. Завершение Сеанса расширенного события.

После завершенного выполнения задания на всех репликах информация о задержке может быть просмотрена с использованием новых отчетов о задержках, отчета о задержке первичной реплики (Primary Replica) и отчета о задержке вторичной реплики (Secondary Replica). Эти отчеты доступны в виде стандартных отчетов (Standard Reports) для групп доступности, как показано ниже.

Отчет о задержке первичной реплики

Отчет о задержке первичной реплики имеет 3 раздела. В первом разделе представлена информация о реплике для групп доступности (AG).

 

Роль реплики AlwaysOn (во время сбора данных)

 

Имя группы доступности

Имя реплики доступности

Роль

LatencyDemo

SQLNode2

PRIMARY

LatencyDemo

SQLNode1

SECONDARY

 

Во втором разделе представлен графический вид среднего  времени фиксации (Commit Time ) на первичной реплике и  среднего удаленного уплотненного времени (Remote Harden Time) для всех вторичных реплик. Эта информация основана на значениях, перенастроенных командой hadr_db_commit_mgr_harden и hasr_receive_harden_lsn_message.

Третий и последний раздел отчета содержит численные значения продолжительности  фиксирования, удаленного уплотнения, времени, затраченного на сжатие, и длительности отправки лог-блока.

Следующие значения отображаются в отчете о задержке первичной реплики:

  1. Commit Time - среднее время, потраченное на фиксацию транзакции на первичной реплике.
  2. Remote Harden Time - время, прошедшее между отправкой лог-блока во вторичную реплику и получением связанного с ним сообщения harden_lsn из вторичных реплик. Оно должно включать следующее: 
    •  Время, затрачиваемое на отправку лог-блока на уровень UCS - передается в отчет первичной реплики
    •  Время, затрачиваемое на отправку лог-блока  в Secondary по сети - НЕ передается ни в один из отчетов.
    • Время, затрачиваемое на получение лог-блока с уровня UCS на вторичной реплике - передается в отчет о вторичной реплике.
    • Время, затрачиваемое на распаковку лог-блока на вторичной реплике. - передается в отчет о первичной реплике
    • Время, затрачиваемое на запись блока журнала на диск на вторичной реплике - передается в отчет о первичной реплике
    • Время, затраченное на отправку подтверждения на уровень UCS на вторичной реплике - передается в отчет о первичной реплике
    • Время, затраченное на отправку подтверждения на первичный сервер по сети - НЕ передается ни в один из отчетов
  3. Compression Time – время, затрачиваемое на сжатие блока журнала перед отправкой на вторичные реплики. В SQL Server 2016 и в более ранних версиях перенос журнала на синхронную вторичную реплику НЕ сжимается, тогда как перенос журнала в реплики Async сжимается.
  4. Local Flush Time – среднее время, затрачиваемое на запись блока журнала в файл LDF. Это значение вычисляется с использованием событий Log_Flush_Start и Log_Flush_Complete Extended.
  5. Send Time – время, затрачиваемое на отправку блока журнала на уровень UCS в SQL. Оно не включает время, затрачиваемое на сетевом уровне (т. е. при переходе между первичной и вторичной репликами)

Отчет о задержке вторичной реплики

Информация о задержке вторичной репликации обеспечивает разбивку времени, затрачиваемого на вторичную реплику во время переноса лог-блока. В этом отчете также есть 3 раздела, как показано ниже.

Следующие значения сообщаются в отчете о задержке вторичной реплики:

  1. Local Flush Time – Сред. время, затрачиваемое на запись блока журнала в файл LDF. Это значение вычисляется с использованием событий Log_Flush_Start и Log_Flush_Complete Extended.
  2. Decompression Time – время, затрачиваемое на распаковку лог-блока после его получения из первичной реплики. В SQL Server 2016 и выше перенос журнала на синхронную вторичную реплику НЕ сжимается, тогда как перенос журнала в реплики Async сжимается.
  3. Receive Time – время, затрачиваемое на получение лог-блока с уровня UCS и включение его для дальнейшей обработки.
  4. Send Time – время, затраченное на отправку сообщения подтверждения на уровень UCS в SQL. Оно не включает время, затрачиваемое на сетевом уровне (т. е. при переходе между первичной и вторичной репликами)

Примечание: на изображениях с примерами отчетов высокий уровень задержки вызван  высокой задержкой движения между первичными и вторичными репликами. Эта демонстрационная установка включала серверы в разных географических регионах (запад США и США), со средней задержкой в 25 минут между двумя серверами.

Функция сбора данных о задержках групп доступности доступна только для учетных записей sysadmin (только для Windows Authenticated) и требует, чтобы текущая учетная запись пользователя принадлежала администратором для всех реплик.

Ограничения

Текущая реализация сбора данных Latency имеет следующие ограничения:

  1. Этот функционал может использоваться только для сбора данных о задержке для одной группы доступности в один момент времени.
  2. Имена объектов TempDB, используемых в нем, жестко запрограммированы. Это означает, что в любой момент может работать только одна коллекция.
  3. Данные о задержках хранятся в таблицах TempDB, что означает, что эта информация будет потеряна, если экземпляр SQL Server перезапустится с момента последнего захвата.
  4. Данные о задержках НЕ доступны прошедшим проверку подлинности  SQL пользователям и логинам, даже если логин является администраторским на сервере.
  5. Учитывая, что функционал включен только для пользователей, прошедших проверку подлинности Windows, она не будет работать для развертывания групп доступности в рабочей группе или в междоменных развертываниях, где нет доверия между доменами.
  6. Этот функционал не работает для групп распределенной доступности.
  7. Этот функционал требует следующих минимальных версий для SQL Server:
  • SQL Server 2017 RTM
  • SQL Server 2016 SP1
  • SQL Server 2014 SP2

No Comments

Add a Comment