Как отключить 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.
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой