Новое в SQL Server 2022: опция WAIT_AT_LOW_PRIORITY в команде DBCC SHRINKDATABASE

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Новая опция WAIT_AT_LOW_PRIORITY в команде DBCC SHRINKDATABASE предоставляет возможность снизить конкуренцию за блокировки во время сжатия базы или файла, заставляя сжатие пережидать окончание других операций на сервере, блокирующих сжатие. Это похоже на опцию WAIT_AT_LOW_PRIORITY для онлайн операций с индексами, но с некоторыми отличиями.

Выдержка из таблицы совместимости блокировок
Выдержка из таблицы совместимости блокировок

Конкурентами сжатия всей базы данных или её файла могут быть операции перестроение индексов, или запросы в нагруженных OLTP - приложениях. Обычная выборка сопровождается блокировкой стабильности схемы (Sch-S), а сжатие базы или файла использует блокировку изменения схемы (Sch-M), которая нужна для перемещения или удалении страниц IAM. Получается, что долгие выборки могут блокировать операцию сжатия, пока не будут завершены. Также, эта ситуация может привести к тому, что новые выборки с блокировкой Sch-S будут ждать завершения операции сжатия, и всё это время будут ей заблокированы. Кроме этого, операции сжатия могут быть заблокированы транзакцией, запущенной с уровнем изоляции, основанном на управлении версиями строк. Всё это в прежних версиях было причиной заметного снижения производительности запросов, а также бывало проблемой при необходимости сжатия файлов базы данных.

Новая функция в SQL Server 2022 (16.x) позволяет сжатию ожидать с низким приоритетом (WLP), за счёт того, что блокировка изменения схемы накладывается в специальном, новом режиме WAIT_AT_LOW_PRIORITY. Если операция сжатия в этом режиме не может получить блокировку Sch-M по указанным ранее причинам дольше 1 минуты, сжатие завершится без ошибок. По истечении времени ожидания в журнал ошибок SQL Server будет отправлено сообщение с идентификатором 49516. Пример:

Msg 49516, Level 16, State 1, Line 134 Shrink timeout waiting to acquire schema modify lock in WLP mode to process IAM pageID 7:7777 on database ID 7.

Если это допустимо, после такого сообщения можно просто снова повторить операцию сжатия в режиме WLP.

Подробности того, какие операции могут заблокировать сжатие, можно найти на странице Общие сведения о проблемах с параллелизмом в DBCC SHRINKDATABASE.

Примечание: с опцией WAITATLOWPRIORITY нельзя использовать параметр ABORTAFTER_WAIT NONE.

Источник: https://habr.com/ru/articles/775468/


Интересные статьи

Интересные статьи

Привет, Хабр! Меня зовут Иван Некипелов, я работаю в Сбере в подразделении «Цифровой Корпоративный Банк» и занимаюсь развитием мобильных приложений СберБизнеса. В статье расскажу о том, что стало для ...
Иногда ежедневная рутина — не самая сложная часть будней. Если на выходе из офиса возникает чувство, что только что завершился раунд Форт Боярда, но Паспарту не&n...
Привет! За последние четыре месяца мы выпускали фичи и между релизами, поэтому в этой статье о том, что нового появилось в DataGrip за это время. Она приурочена к нашему новому релизу...
Привет! Это пост-отчёт с android-митапа, который недавно прошёл в офисе Авито. С коллегами из Озон, Surf, Revolut и Авито мы обсуждали интеграцию Yandex Mapkit 3, как быстро запускать фичи с Serv...
Новая версия PHP хоть и является минорной, но уже несёт множество новых, без преувеличения, крутых возможностей как для синтаксиса языка, так и для его производительности. Список новшеств не окон...