Query Store (#03) – Lock grande ao tentar limpar o Query Store
Fala Pessoal,
Continuando a série sobre o Query Store, antes de entrar nos detalhes de como ele pode nos ajudar em nosso dia a dia, vou mostrar alguns problemas que tive em alguns cenários para que possam ter conhecimento antes de habilitarem a feature em 100% dos ambientes que administram.
Quase 1 ano atrás, em um banco de dados crítico e com uso intenso de recursos, o query store me ajudou bastante a identificar muitas queries problemáticas.
Um certo dia o query store encheu… Vixe…
No query store temos uma opção na tela para limpar as informações que estão la dentro, que é a mesma coisa que executar esse comando abaixo:
alter database Nome_Database set QUERY_STORE CLEAR ALL
Esse comando sempre foi muito rápido de ser executado. Deveria ser algo parecido com um TRUNCATE TABLE, que é bem rápido.
Imaginando que continuaria sendo rápido, fui limpar o query store para pegar novas informações desse ambiente e o comando acabou gerando um grande lock no Banco de Dados:
A conexão 81 já estava rodando a 6 minutos no momento do print (passou de 10 minutos) e gerou locks em outras queries do sistema. #treta
Não tinha o que fazer, só rezar e esperar acabar. Fiquei com receio de matar e piorar ainda mais a situação.
Passou mais alguns minutos, o comando acabou e tudo voltou ao normal.
Isso já tem quase 1 ano que aconteceu. Aí, no dia 16/10/2018, a microsoft liberou esse FIX abaixo:
O FIX corrige exatamente esse problema que tive:
“Assume that you enable Query Store in SQL Server 2016 and 2017. When you run the command ALTER DATABASE <DatabaseName> SET QUERY_STORE CLEAR on a very busy database, you may notice that the transactions and log truncation will be blocked by a Query Store background thread.”
Ou seja, se vai usar o query store, atualize o seu sql server até o Hotfix mais recente!!!
Hoje, você consegue evitar esse problema que eu passei, pois já foi corrigido.
No post abaixo, a Erin Stellato listou uma série de correções que já foram lançadas para o Query Store:
https://www.sqlskills.com/blogs/erin/important-query-store-fixes-january-2019/
São várias correções!
Ela tem muitos outros posts sobre o assunto e é uma das defensoras de mantermos o Query Store ligado sempre nos ambientes. Mas sobre isso falamos nos próximos posts.
Essa é a Erin (ela pediu para tirar uma foto comigo):
A Kendra Little também conseguiu simular um lock com o query store quando você está alterando uma tabela e em seguida limpa o Query Store:
https://sqlworkbooks.com/2018/04/query-store-cleanup-can-be-part-of-a-blocking-chain/
Esse lock da Kendra eu consegui simular aqui e continua. É um comportamento padrão da feature até então.
É só você não limpar o query store durante uma operaão de alterar uma tabela ou outra ação de DBA parecida. Vamos fazer uma coisa de cada vez (rsrs).
Essa é a Kendra (que também pediu para tirar uma foto comigo):
Conclusão: Atualize seu SQL Server com o Hot Fix mais recente antes de habilitar o Query Store.
É isso ai pessoal, até o próximo post da série sobre o Query Store.
Caso não tenha lido o post anterior:
- Query Store (#1) – Introdução
- Query Store (#2) – Você está utilizando o Query Store do SQL Server em produção?
Gostou da dica?
Curta, comente, compartilhe com os coleguinhas…
Assine meu canal no Youtube , curta a Página no Facebook e siga nosso perfil no Instagram para receber Dicas de Leituras e Eventos sobre SQL Server.
Abraços,
Fabrício Lima.
Microsoft Data Platform MVP
Consultor e Instrutor SQL Server
Trabalha com SQL Server desde 2006