Qual o benefício de ativar o Query Store no msdb?

9

No banco de dados do sistema SQL (mestre, modelo, msdb, tempdb), o repositório de consultas pode ser usado apenas no msdb. Procurei e não encontro nenhuma documentação sobre o armazenamento de consultas no msdb.

Embora você não possa vê-lo na GUI, ele pode ser validado na sua instância do SQL 2016

Validar Query Store está desativado

USE msdb
SELECT * FROM sys.database_query_store_options; 

Ativar o 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

Validar armazenamento de consultas está ativado

USE msdb
SELECT * FROM sys.database_query_store_options; 

De todo o banco de dados do sistema, por que o msdb é o único com a opção de usar o Query Store e qual valor ele adiciona?

-- Stop Query Store
USE [master]
GO
ALTER DATABASE msdb SET QUERY_STORE = OFF
GO
James Jenkins
fonte
James, veja minha atualização de resposta relacionada à [model]inclusão na lista de "não permitido".
Solomon Rutzky
@SolomonRutzky eu vejo, muito interessante. Tenho comentários sob sua resposta, fique à vontade para continuar expandindo sua resposta.
James Jenkins
@SolomonRutzky Na verdade, talvez uma nova pergunta não seja pertinente. Consulte Posso ativar o Query Store automaticamente quando crio novos bancos de dados?
James Jenkins

Respostas:

7

A ativação de um recurso pela Microsoft não significa que será útil para todos. Para sistemas que usam alguns dos recursos, pode significar confiar nas informações armazenadas no MSDB. Nesses casos, o Query Store pode ser útil.

Aqui estão alguns artigos sobre o uso e ajuste de objetos de banco de dados MSDB.

Banco de dados msdb de livros online.

Ajuste de desempenho do MSDB por Geoff N. Hiten

A importância da manutenção no MSDB por Tim Radney, onde ele mencionou o seguinte:

A otimização de índices no msdb é tão importante quanto os bancos de dados do usuário. Muitas vezes encontrei clientes que estão otimizando bancos de dados de usuários, mas não os bancos de dados do sistema. Como o banco de dados msdb é muito usado pelo SQL Server Agent, Log Shipping, Service Broker, SSIS, backup e restauração e outros processos, os índices podem ficar altamente fragmentados. Verifique se os trabalhos de otimização de índice também incluem os bancos de dados do sistema, ou pelo menos msdb. Vi otimizações de índice liberar vários gigabytes de espaço de índices altamente fragmentados no msdb.

Eu posso ver como o armazenamento de consultas pode ajudar a otimizar sua estratégia de indexação e otimizar a consulta / agregação / remoção de algumas das informações armazenadas no MSDB.

SqlWorldWide
fonte
11
Além dos recursos [msdb]mencionados na citação, os "outros processos" incluiriam coisas como: dbmail, serviços do Central Management Server (CMS) (mais notavelmente as listas de servidores registrados compartilhados), acho que alguém nos comentários desse post mencionado Policy Based Management (PBM), e acho que Auditorias de servidor (pelo menos as definições, mas não confirmei isso).
Solomon Rutzky
5

O @SqlWorldWide respondeu à parte "por que [msdb]" da pergunta, para não duplicá-la aqui. Mas, para responder o "porquê não [master], [model], [tempdb]" parte da pergunta:

  • [tempdb]O armazenamento é temporário e, por sua própria natureza, parece nunca se beneficiar da otimização automatizada ou da capacidade de fornecer análises históricas. Se o Query Store rastreia estatísticas de execução em Procedimentos armazenados, isso não ajudará aqui quando os Procedimentos armazenados existirem em outro lugar. E embora seja possível criar Procedimentos Armazenados temporários, os Procs Armazenados temporários locais provavelmente não se beneficiariam disso, pois seu nome inclui um código de hash exclusivo para separar nomes semelhantes em várias sessões. E, embora os Procs Armazenados temporários globais tenham um nome consistente entre as sessões, dada a natureza temporária, não há como supor que os Procs Armazenados temporários globais com o mesmo nome nas sessões (suponha que não ao mesmo tempo) tenham o mesmo código, e, portanto, não pode ter significado /estatísticas correlacionáveis .

  • [model]é o modelo para criar novos bancos de dados (inclusive [tempdb], que são recriados toda vez que a instância do SQL Server é iniciada / reiniciada). As consultas não são executadas a partir daqui. No entanto, acho que pode fazer sentido para permitir a consulta loja de estar activado para que seja ON por padrão ao criar novos bancos de dados. Mas, no entanto, que no entanto, isso significaria Consulta loja iria estar habilitado [tempdb], e isso é uma bobagem (ver ponto diretamente acima).

    ATUALIZAÇÃO:
    Woah, Nelly! Acabei de reler a pergunta inicial que levou a essa e notei algo estranho: havia apenas uma mensagem de erro para [master]e [tempdb]; não houve erro relatado para [model]. É possível que o OP simplesmente tenha deixado de fora essa mensagem de erro ao copiar para a pergunta, então executei o seguinte no SQL Server 2016 SP1-CU7-GDR (13.0.4466.4) para ver por mim mesmo:

    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];

    E os resultados? [model]e [IsQueryStoreEnabledByDefault]são devolvidos, mas [tempdb]é não nos resultados! Assim, um adicional no entanto para os dois primeiros "no entanto" s, parece que [model] pode ter Consulta loja permitiu que a) os padrões de consulta capacitação armazenado (sim, é uma palavra, eu mesmo verificado ;-) para bancos de dados recém-criado, e b) é ignorado para a recriação [tempdb]no início do serviço (portanto, isso não é uma porta dos fundos para ativá-lo [tempdb]).  

  • [master]é o banco de dados do sistema principal e você não deve ter código em execução aqui. Além disso, os procedimentos armazenados que existem aqui e são usados ​​com freqüência não se beneficiariam da otimização ou seriam executados no contexto do banco de dados do usuário em que são chamados (por exemplo, procs armazenados no sistema começando com sp_são um caso especial em que eles "aparecem" DBs - não precisam ser totalmente qualificados com [master]..- e executados como se realmente existissem em cada banco de dados) e provavelmente são governados pelo Query Store nos Bancos de Dados do Usuário em que estão sendo chamados.

Solomon Rutzky
fonte
Quando você executa o modelo USE SELECT * FROM sys.database_query_store_options; Depois de ativar o modelo Query Store, ele não é exibido como ativado. MAS> Como você diz que o novo banco de dados o ativou, no meu caso, ele usou as alterações opcionais que eu selecionei ao tentar acessá-lo no início do dia. Portanto, se você for usar o modelo, provavelmente desejará definir todas as opções do Query Store conforme sua preferência para evitar surpresas.
James Jenkins