Banco de Dados

22 abr, 2019

Query Store – Parte 03: Lock grande ao tentar limpar o Query Store

Publicidade

Fala, pessoal!

Continuando a série sobre o Query Store, antes de entrar nos detalhes sobre 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.

Há quase um ano, 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 (vish).

No Query Store temos uma opção na tela para limpar as informações que estão lá 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 – 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 há seis minutos no momento do print (passou de 10 minutos) e gerou locks em outras queries do sistema.

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á faz quase um ano. Aí, no dia 16/10/2018, a Microsoft liberou o 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 artigo abaixo a Erin Stellato listou uma série de correções que já foram lançadas para o Query Store:

São várias correções!

Ela tem muitos artigos sobre o assunto e é uma das defensoras de mantermos o Query Store ligado sempre nos ambientes, mas sobre isso falaremos nos próximos artigos.

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:

Esse lock da Kendra eu consegui simular aqui e continua. É um comportamento padrão da feature até então.

É só você não limpar a Query Store durante uma operação de alterar uma tabela ou outra ação de DBA parecida. Faremos uma coisa de cada vez.

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 artigo da série sobre o Query Store.

Caso não tenha lido os artigos anteriores:

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!