Query Store é uma nova ferramenta do SQL Server 2016 que foi criada para ajudar administradores de banco de dados a solucionar problemas relacionados à queda de desempenho nas consultas devido a uma regressão na escolha do plano de execução da consulta pelo Query Optimizer. Esse tipo de problema geralmente demanda horas e até dias preciosos de trabalho para ser resolvido. Normalmente só temos conhecimento desse tipo de problema quando o cliente liga reportando o seguinte: “Meu relatório estava executando em segundos ontem e hoje está demorando para retornar o resultado. ”, ou “Antes da aplicação do patch desse final de semana a aplicação estava normal, agora está devagar. ”.
A mudança no plano de execução das consultas pode ser causada por vários motivos, como aplicação de cumulative update, security patch, service pack, estatísticas desatualizadas, mudanças de schema e criação/deleção de índices. Nas versões anteriores do SQL Server existiam algumas opções para fazer esse tipo de análise, como consultar algumas DMVs (Dynamic Management Views), habilitar o SQL Server Profiler ou Extended Events.
Dependendo dos casos, é necessário usar mais de uma abordagem para ter uma ideia mais clara do que poderia estar causando o problema de desempenho na consulta ou qual consulta está causando queda de desempenho na aplicação. O Query Store foi criado para simplificar a análise e solução desse tipo de problema. Não veio para substituir o SQL Server Profiler ou Extended Events porque não funciona como uma ferramenta de trace que é habilitada e fica monitorando determinados eventos. O Query Store é específico para capturar as consultas realizadas em um determinado banco de dados, juntamente com os planos de execução e as estatísticas dessas consultas.
Este artigo busca introduzir o Query Store aos administradores de banco de dados SQL Server, apresentando os recursos disponíveis dessa nova ferramenta e as formas de utilização.
Vale lembrar que o SQL Server 2016 está em uma versão de testes (atualmente CTP 3.0), por isso qualquer funcionalidade apresentada neste artigo pode ser alterada ou removida, e outras podem ser adicionadas quando a versão oficial for lançada. De qualquer modo, seu estudo e conhecimento é, desde já, importante, uma vez que se trata de uma ferramenta que vem para facilitar a vida do DBA.
Ainda não foi divulgado pela Microsoft em quais versões do SQL Server estará disponível o Query Store, a única certeza, por enquanto, é que estará na versão Enterprise do SQL Server 2016.
Introdução ao Query Store
Nas versões anteriores do SQL Server, quando era encontrada uma consulta com problema de desempenho, era difícil descobrir o motivo pelo qual aquela consulta havia ficado lenta ou qual era o antigo plano de execução dela; e mesmo após descobrir, seria difícil alterar uma consulta da aplicação para colocar uma HINT, como OPTIMIZE FOR, pois seria necessário alterar a linha de código da aplicação, e nem todo mundo pode fazer esse tipo de alteração, mesmo porque geralmente envolve custo para o cliente.
Outra alternativa para evitar mudanças na aplicação seria usar Plan Guides, ferramenta disponibilizada a partir do SQL Server 2005, que possibilita ao DBA forçar o SQL Server a usar um determinado plano de execução para a consulta, sem alterações na aplicação. É recomendado deixar o Query Optimizer decidir o melhor plano de execução, mas às vezes ele não é capaz de fazer a escolha certa, por isso usamos o Plan Guide. Ainda assim, é muito complicado saber qual é o melhor plano de execução que deve ser forçado usando o Plan Guide, e às vezes usar a ferramenta pode não ser a melhor escolha.
É nesse cenário que entra o Query Store, pois ele armazena fisicamente, no disco, todos os planos de execução de uma determinada base de dados, diferentemente do Plan Cache, que armazena os últimos planos de execução na memória, os quais podem ser removidos devido a pressões internas ou externas na memória, reboot do servidor, entre outros. O Query Store não vai substituir nem interferir no funcionamento do Plan Cache, mas será uma ferramenta extra para auxiliar o DBA a encontrar consultas que tiveram queda de desempenho ou consultas que mais consomem recursos do servidor.
Quando o Query Store é habilitado na base
de dados, ele armazena todos os planos de execução e as consultas realizadas na
base, inclusive planos de execução que não são armazenados no Plan Cache, como
os planos que são executados com a opção RECOMPILE. Além d ...