Рейтинг:2

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

флаг sa

(Первоначально опубликовано на DBA.StackExchange.com, но закрыто, надеюсь, более актуально здесь.)

Александр и Грозный, Ужасный, Нехороший, Очень Плохой... резервные копии.

Установка:

у меня есть локальная Стандартный выпуск SQL Server 2016 экземпляр, работающий на виртуальная машина от ВМВар.

@@Версия:

Microsoft SQL Server 2016 (SP2-CU17) (KB5001092) — 13.0.5888.11 (X64) 19 марта 2021 г., 19:41:38 Авторское право (c) Стандарт корпорации Майкрософт Edition (64-разрядная версия) в Windows Server 2016 Datacenter 10.0 (сборка 14393: ) (гипервизор)

Сам сервер в настоящее время выделен 8 виртуальных процессоров, имеет 32 ГБ памяти, и все диски - это NVM которые обойти 1 ГБ/сек ввода/вывода. Сами базы живут на диске G:, а резервные копии отдельно хранятся на диске P:. Общий размер всех баз данных составляет около 500 ГБ (до сжатия в сами файлы резервных копий).

План обслуживания запускается один раз ночью (около 22:30) для создания полной резервной копии каждой базы данных на сервере. На сервере не работает ничего необычного, и в это время, в частности, ничего не работает. План электропитания на сервере установлен на «Сбалансированный» (а для «Отключить жесткий диск через» установлено значение 0 минут, то есть никогда не выключайте его).

Что случилось:

За последний год или около того общее время выполнения задания плана обслуживания заняло около 15 минут. минуты Всего завершить. С прошлой недели он увеличился примерно в 40 раз, примерно в 15 раз. часы завершить.

Единственное, что я знаю об изменении в тот же день, когда план обслуживания замедлился, это следующие обновления Windows, которые были установлены на машине до запуска плана обслуживания:

Обновления Windows

  1. KB890830
  2. КБ5004752
  3. КБ5005043
  4. VMWare — SCSIAадаптер — 1.3.17.0
  5. VMWare — дисплей — 8.17.2.14

У нас также есть еще один экземпляр SQL Server с аналогичной подготовкой на другой виртуальной машине, которая подверглась тем же обновлениям Windows, а затем впоследствии также испытала более медленное резервное копирование. Думая, что обновления Windows были непосредственной причиной, мы полностью откатили их, и план обслуживания резервных копий все равно работает очень медленно. Как ни странно, восстановление резервных копий для данной базы данных происходит очень быстро и использует почти все 1 ГБ/с ввода-вывода на NVM.

Что я пробовал:

Используя sp_whoisactive от Adam Mechanic, я определил, что типы последнего ожидания процессов резервного копирования всегда указывают на проблему с производительностью диска.я всегда вижу РЕЗЕРВНЫЙ БУФЕР и РЕЗЕРВНОЕ КОПИРОВАНИЕ типы ожидания, в дополнение к ASYNC_IO_COMPLETION:

sp_whoisactive

При просмотре Монитора ресурсов на самом сервере во время резервного копирования раздел Дисковый ввод-вывод показывает, что общий объем ввода-вывода составляет всего около 14 МБ/с (максимальное, что я когда-либо видел с момента возникновения этой проблемы, это 30 МБ/сек):

Монитор ресурсов

Наткнувшись на это полезное Статья Брента Озара об использовании DiskSpd, я попробовал запустить его сам с аналогичными параметрами (только уменьшив количество потоков до 8, так как у меня на сервере 8 виртуальных процессоров и установив запись на 50%). Это точная команда diskspd.exe -b2M -d60 -o32 -h -L -t8 -W -w50 "C:\Users\...\Desktop\Microsoft DiskSpd\Test\LargeFile.txt". Я использовал текстовый файл, созданный вручную, размером чуть менее 1 ГБ. Я считаю, что измеренный ввод-вывод кажется нормальным, но задержки диска показывали нелепые цифры:

DiskSpd Результаты 1

DiskSpd Результаты 2

Результаты DiskSpd кажутся буквально невероятными. После дальнейшего чтения я наткнулся на запрос Пола Рэндалла, который возвращает показатели задержки диска для каждой базы данных. Это были результаты:

Пол Рэндал — Показатели задержки на диске

Наихудшая задержка записи составила 63 миллисекунды, а наихудшая задержка чтения — 6 миллисекунд, так что это кажется большим отличием от DiskSpd и не кажется достаточно ужасным, чтобы быть основной причиной моей проблемы. Продолжая перекрестную проверку, я запустил несколько счетчиков PerfMon на самом сервере. эта статья Майкрософт, и это были результаты:

Результаты PerfMon

Здесь нет ничего экстраординарного, максимальное значение всех счетчиков, которые я измерил, было 0,007 (что, я полагаю, составляет миллисекунды?). Наконец, моя группа по инфраструктуре проверила показатели задержки диска, которые VMWare регистрировала во время задания резервного копирования, и вот результаты:

Задержка диска VMWare и журналы ввода-вывода

Похоже, что в худшем случае около полуночи произошел всплеск задержки примерно на 200 миллисекунд, а максимальная скорость ввода-вывода составила 600 КБ/с (чего я не совсем понимаю, поскольку монитор ресурсов показывает, что резервные копии по крайней мере используют около 14 МБ/с ввода/вывода).

Другие вещи, которые я пробовал:

Я только что попытался восстановить одну из больших баз данных (около 250 ГБ), и восстановление заняло всего около 8 минут. Затем я попытался запустить DBCC CHECKDB на нем, и это заняло в общей сложности 16 минут (не уверен, что это нормально), но Resource Monitor показал аналогичные проблемы с вводом-выводом (максимальная скорость ввода-вывода, которую он когда-либо использовал, составляла 100 МБ / с), при этом больше ничего не работало:

Монитор ресурсов для DBCC CHECKDB

Вот результаты sp_whoisactive при первом запуске DBCC CHECKDB а затем, когда он был выполнен на 5%, обратите внимание, что расчетное оставшееся время увеличилось примерно на 5 минут, даже после того, как он был выполнен уже на 5%.

Начинать: sp_whoisactive DBCC CHECKDB Старт

5% Готово: sp_whoisactive DBCC CHECKDB 5% Готово

Я предполагаю, что это нормально, так как это всего лишь оценка, и 16 минут не кажутся слишком плохими для базы данных на 250 ГБ (хотя я не уверен, что это нормально), но снова ввод-вывод был максимальным только в около 10% возможностей диска, при этом на сервере или экземпляре SQL больше ничего не работает.

Это результаты из DBCC CHECKDB, об ошибках не сообщается.

Я также испытывал странные проблемы с медлительностью с СОКРАЩАТЬ команда. я просто пытался СОКРАЩАТЬ база данных, в которой было 5% места для выпуска (около 14 ГБ). На выполнение 90% задания ушло всего около 1 минуты. СОКРАЩАТЬ:

Быстро уменьшить на 90%

Примерно через 5 минут он все еще зависает на том же проценте завершения, а мои резервные копии журнала транзакций (которые обычно заканчиваются через 1-2 секунды) находятся в состоянии спора в течение примерно 30 секунд:

Сжатие застряло на 90%

15 минут спустя и СОКРАЩАТЬ только что заканчивается, в то время как резервные копии журнала транзакций все еще обсуждаются в течение примерно 6 минут и завершены только на 50%. Я считаю, что они сразу же закончили сразу после этого, так как СОКРАЩАТЬ законченный. Все это время Монитор ресурсов показывал, что ввод-вывод все еще отстой:

Завершено

Монитор ресурсов для сжатия

Затем я получил ошибку с СОКРАЩАТЬ команда, когда она закончилась:

Ошибка сжатия

я повторил попытку СОКРАЩАТЬ снова, и это привело к тому же результату, что и выше.

Затем я попытался вручную создать резервную копию T-SQL в файл на диске P:, и это работало медленно, как и задание резервного копирования плана обслуживания:

Ручное резервное копирование T-SQL

В итоге я отменил его примерно через 3 минуты, и он сразу же откатился.

Резюме:

Так совпало, что задание плана обслуживания резервного копирования становилось примерно в 40 раз медленнее (с 15 минут до 15 часов) каждую ночь сразу после установки обновлений Windows. Откат этих обновлений Windows не решил проблему. Типы ожидания SQL Server, Resource Monitor и Microsoft DiskSpd указывают на проблему с диском (в частности, с вводом-выводом), но все другие измерения из запроса Пола Рэндалла, PerfMon и журналов VMWare не сообщают о каких-либо проблемах с дисками. Восстановление резервных копий для конкретной базы данных выполняется быстро и использует почти все операции ввода-вывода со скоростью 1 ГБ/с. Я чешу голову...

rvsc48 avatar
флаг gh
Некоторые другие области, которые вы могли бы проверить: слишком много файлов виртуального журнала (вы можете найти это в Google), запуск метрик/запросов ввода-вывода на хост-компьютере VMWare, есть ли что-нибудь в журнале событий Windows на самом сервере и хосте, и есть ли там что-нибудь важное в журнале ошибок сервера Sql (exec xp_readerrorlog), особенно во время выполнения резервного копирования? Иногда о замедлении ввода-вывода сообщается в журнале ошибок сервера sql. Результаты запроса Рэндалла, насколько я помню, выглядят хорошо, если задержка ниже 100.
Рейтинг:0
флаг sa

В этом случае у нас действительно была проблема с диском, и это не была внутренняя проблема SQL Server для этой конкретной виртуальной машины. На самом деле это оказалось ошибкой, с которой мы столкнулись в Veeam и VMWare.

Подводя итог моему пониманию того, что произошло, очевидно, что наши резервные копии Veeam не были признаны завершенными VMWare. Таким образом, каждый день, когда приходило время для резервного копирования сервера, VMWare инструктировала Veeam о повторном резервном копировании предыдущего дня, что превратилось в эту кумулятивную растущую проблему в течение двух недель. (Я уверен, что я вырезал это объяснение, но это в значительной степени то, что я знаю.)

Veeam / VMWare приходилось удалять каждый файл моментального снимка, который каждый день был больше, чем предыдущий, поэтому на завершение их поддержки уровня 3 ушло около 26 часов. После этого виртуальная машина снова работала нормально. Судя по их техподдержке, это не редкость.

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.