Skip to content

Как отключить Query Store...в случае крайней необходимости

Пересказ статьи Erin Stellato. How to Turn Off Query Store…in an emergency


Пытались ли вы когда-нибудь отключить Query Store (хранилище запросов) при возникновении проблемы, думая, что проблема может быть связана с Query Store, а оператор ALTER DATABASE был заблокирован? И тогда вы ничего другого не можете сделать как только ждать? Я да. Представьте себе моё возбуждение, когда я обнаружил, что команда SQL Server спрятала полезный черный ход во ВСЕХ версиях, которые поддерживают Query Store.

Чего ждать?


Если вы обратитесь к документации на ALTER DATABASE SET и прочитаете раздел QUERY_STORE, то увидите, что OFF теперь включает дополнительный параметр FORCED.

Если вы работаете с:

  • SQL Server 2016 SP2 CU14+

  • SQL Server 2017 C21+

  • или SQL Server 2019 CU6+


то имеете возможность принудительного отключения Query Store, даже если он находится в середине процесса типа сброса данных на диск или очистки данных. Опция FORCED останавливает все связанные фоновые задачи, которые выполняются в данный момент, и пропускает сброс, который может иметь место (для сохранения данных, которые находились в памяти, на диск). По сути, Query Store выключается максимально быстро.

Как отключить Query Store


Обычно, если вы хотите отключить Query Store, то должны выполнить:

ALTER DATABASE [DBName] SET QUERY_STORE = OFF

При работе с заказчиком, у которого был установлен SQL Server 2017, их 100-гигабайтный Query Store занимал почти 45 минут при загрузке (попутно замечу, что этот размер находится за пределами рекомендуемых максимум 10Гб). Когда мы пытались выполнить вышеприведенный оператор для отключения Query Store, он блокировался процессом с типом ожидания QDS_LOAD (загрузка данных в памяти), поскольку флаг трассировки 7752 был недоступен.

Теперь при этом сценарии, или любом другом, когда мы хотим выключить эту возможность немедленно, мы можем выполнить:

ALTER DATABASE [DBName] SET QUERY_STORE = OFF (FORCED)

Мысли на прощание


Имейте в виду, что если вы принудительно отключите хранилище запросов, любые данные, которые находятся в памяти и не были сброшены на диск, будут потеряны. В зависимости от проблемы, эти данные могут быть полезны при её решении.

Я не ожидаю, что эта опция будет часто использоваться в SQL Server 2019, в силу многочисленных улучшений и нового режима захвата CUSTOM (и поскольку флаг трассировки 7752 функционально включен по умолчанию). Однако я думаю, что эта опция будет полезна для всякого, кто работает на SQL Server 2016 или SQL Server 2017, и у кого может быть неправильно установлен CAPTURE_MODE, или кто может иметь высоконагруженный сервер, рабочая нагрузка которого не подходит для хранилища запросов, если не может быть использован режим захвата CUSTOM.



Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.