Какая польза от включения Query Store на msdb?

9

Из базы данных системы SQL (master, model, msdb, tempdb) хранилище запросов можно использовать только для msdb. Я посмотрел и не нашел никакой документации о хранилище запросов на MSDB.

Хотя вы не видите его в графическом интерфейсе, его можно проверить на вашем экземпляре SQL 2016

Проверка магазина запросов отключена

USE msdb
SELECT * FROM sys.database_query_store_options; 

Включить Query Store

USE [master]
GO
ALTER DATABASE msdb SET QUERY_STORE = ON
GO
ALTER DATABASE msdb SET QUERY_STORE (OPERATION_MODE = READ_WRITE
, INTERVAL_LENGTH_MINUTES = 30
, MAX_STORAGE_SIZE_MB = 1000
, QUERY_CAPTURE_MODE = AUTO)
GO

Проверка магазина запросов включена

USE msdb
SELECT * FROM sys.database_query_store_options; 

Из всей системной базы данных почему msdb единственная с возможностью использовать Query Store, и какое значение она добавляет?

-- Stop Query Store
USE [master]
GO
ALTER DATABASE msdb SET QUERY_STORE = OFF
GO
Джеймс Дженкинс
источник
Джеймс, пожалуйста, смотрите мой ответ обновления, связанные с [model]включением в список "не разрешено".
Соломон Руцкий
@SolomonRutzky, я вижу, очень интересно. У меня есть комментарии под вашим ответом, продолжайте расширять свой ответ.
Джеймс Дженкинс
@SolomonRutzky На самом деле, возможно, новый вопрос не по порядку. См. Можно ли автоматически включать Query Store при создании новых баз данных?
Джеймс Дженкинс

Ответы:

7

Microsoft, включающая функцию, не означает, что она будет полезна для всех. Для систем, использующих некоторые функции, это может означать использование информации, хранящейся в MSDB. В этих случаях может быть полезен Query Store.

Вот несколько статей об использовании и настройке объектов базы данных MSDB.

База данных MSDB из книг онлайн.

Настройка производительности MSDB от Джеффа Н. Хитена

Важность Поддержки на MSDB Тимом Радни , где он упомянул следующее:

Оптимизация индексов в msdb так же важна, как и ваши пользовательские базы данных. Много раз я встречал клиентов, которые оптимизируют пользовательские базы данных, но не системные базы данных. Поскольку база данных msdb интенсивно используется агентом SQL Server, доставкой журналов, компонентом Service Broker, службами SSIS, резервным копированием и восстановлением и другими процессами, индексы могут сильно фрагментироваться. Убедитесь, что ваши задания по оптимизации индекса также включают в себя системные базы данных или хотя бы msdb. Я видел, как оптимизации индекса освобождают несколько гигабайт пространства от сильно фрагментированных индексов в msdb.

Я вижу, как хранилище запросов может помочь оптимизировать вашу стратегию индексирования и оптимально запрашивать / агрегировать / очищать некоторую информацию, хранящуюся в MSDB.

SqlWorldWide
источник
1
В дополнение к функциям, [msdb]указанным в цитате, «другие процессы» будут включать в себя такие вещи, как: dbmail, службы центрального сервера управления (CMS) (наиболее часто используемые списки зарегистрированных серверов), я думаю, что кто-то в комментариях к этому связанному посту упоминал Управление на основе политик (PBM), и я думаю, что аудиты серверов (по крайней мере, определения, но я не подтвердил это).
Соломон Руцки
5

@SqlWorldWide ответил на вопрос «почему [msdb]», поэтому я не буду повторять это здесь. Но , чтобы ответить на «почему нет [master], [model], [tempdb]» часть вопроса:

  • [tempdb]является временным хранилищем, и по самой своей природе, кажется, никогда не выиграет ни от автоматизированной оптимизации, ни от возможности проводить исторический анализ. Если Query Store отслеживает статистику выполнения в хранимых процедурах, это не поможет, когда хранимые процедуры существуют в других местах. И хотя можно создавать временные хранимые процедуры, локальные временные хранимые процедуры, скорее всего, не выиграют от этого, учитывая, что их имя содержит уникальный хэш-код для разделения похожих имен между несколькими сеансами. И хотя глобальные временные хранимые прокси имеют одно и то же имя в разных сеансах, учитывая временную природу, нельзя предположить, что глобальные временные хранимые прокси с одним и тем же именем в разных сеансах (предположим, не в одно и то же время) будут иметь один и тот же код, и, следовательно, не может иметь значимого /сопоставимая статистика.

  • [model]это шаблон для создания новых баз данных (в том числе [tempdb], который создается заново при каждом запуске / перезапуске экземпляра SQL Server). Запросы не выполняются отсюда. Тем не менее, я полагаю, что может иметь смысл разрешить Query Store, чтобы он был включен по умолчанию при создании новых БД. Но, как бы то ни было, это будет означать, что Query Store будет включен [tempdb], и это просто глупо (см. Пункт выше).

    ОБНОВЛЕНИЕ:
    Вау, Нелли! Я просто перечитал первоначальный вопрос, который привел к этому, и заметил нечто странное: были только сообщения об ошибках для [master]и [tempdb]; не было сообщений об ошибках [model]. Вполне возможно, что OP просто пропустил это сообщение об ошибке при копировании в вопрос, поэтому я запустил следующее на SQL Server 2016 SP1-CU7-GDR (13.0.4466.4), чтобы убедиться в этом:

    ALTER DATABASE [model] SET QUERY_STORE = ON; -- completes successfully!
    
    -- Restart instance to force recreation of [tempdb];
    
    CREATE DATABASE [IsQueryStoreEnabledByDefault];
    
    SELECT * FROM sys.databases WHERE [is_query_store_on] = 1;
    
    DROP DATABASE [IsQueryStoreEnabledByDefault];
    

    И результаты? [model]и [IsQueryStoreEnabledByDefault]возвращаются, но [tempdb]это не в результатах! Таким образом, дополнительный , однако в первых двух « однако» s, кажется , что [model] может быть включен запрос магазин , который а) по умолчанию Query Stored ВОЗМОЖНОСТЕЙ (да, это слово, я даже проверил ;-) для вновь созданной БД, и б) игнорируется для воссоздания [tempdb]при запуске службы (следовательно, это не задний ход для его включения [tempdb]).  

  • [master]является основной базой данных системы, и здесь не должно быть запущенного кода. Кроме того, хранимые процедуры, которые существуют здесь и часто используются, либо не выиграют от оптимизации, либо выполняются в контексте пользовательской базы данных, где они вызываются (т. Е. Системные хранимые процессы, начиная с, sp_являются особым случаем, когда они «появляются» во всех БД - не обязательно должны быть полностью квалифицированы [master]..- и выполняться так, как будто они действительно существуют в каждой БД) и, вероятно, управляются хранилищем запросов в пользовательских базах данных, где они вызываются.

Соломон Руцкий
источник
Когда вы запускаете модель USE SELECT * FROM sys.database_query_store_options; После включения модели Query Store он не отображается как включенный. НО> Как вы говорите, в новой базе данных она включена, в моем случае она использовала необязательные изменения, которые я выбрал, когда стучал по ней ранее днем. Поэтому, если вы собираетесь использовать модель, вы, вероятно, захотите установить все параметры хранилища запросов по своему усмотрению, чтобы избежать неожиданностей.
Джеймс Дженкинс