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
sql-server
sql-server-2016
msdb
query-store
James Jenkins
fonte
fonte
[model]
inclusão na lista de "não permitido".Respostas:
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:
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.
fonte
[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).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: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 comsp_
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.fonte