AGUARDE... CARREGANDO...

Melhorando a Performance de Consultas no Totvs Protheus – Parte 6

Fala pessoal,

Antes de lerem esse post, caso ainda não tenham lido os anteriores, sugiro que façam para seguirem a linha de raciocínio:

Hoje vamos analisar a query abaixo que está fazendo um número muito alto de leituras no banco:

Segue o custo dessa query:

3 milhões de reads na tabela SZT010. A treta da query está aí.

Esse é o plano da query:

 

Como vimos que a treta está na tabela SZT, vamos procurar essa tabela no plano.

O SQL Server está realizando um Key Lookup 703 mil vezes no índice clustered dessa tabela.

Hummm… Olha aí o motivo da treta.

Mas Fabrício, agora o SQL Server não me sugeriu nenhum índice. Lascou. Só conseguia melhorar algo quando ele me mostrava.

Como não só de missed index vive o homem, vamos olhar para a query e pensar como ela poderia ser executada de forma mais rápida.

O Filtro mais seletivo que encontrei no WHERE foi esse abaixo:

Dessa forma vou criar um índice na tabela RC1080 começando por essa coluna. Vou incluir nesse índice apenas as colunas utilizadas no WHERE para ele não ficar muito grande.

Em seguida, o SQL deverá fazer um join com a tabela SZT010 pelas colunas abaixo:

Para induzir o SQL a fazer isso, vou criar um índice que começa por essas colunas do join (a mais seletiva para a esquerda).

Segue abaixo os dois índices que criei:

Ao rodar a query novamente, temos mais um WOW!!!!

A quantidade de leituras reduziu drasticamente.

Consumo antes:

Consumo depois:

Redução de 3 milhões de leitura de páginas de 8 kb para 32 leituras e gerando o mesmo resultado. WOW!!!

Segue o novo plano da query:

Com os dois índices que criei, eu induzi o SQL Server a rodar a query da forma que achei que seria mais rápida.

Ele já estava doido para rodar essa query dessa forma, só estava esperando um DBA/DEV criar esses índices para ele evitar de fazer 3 milhões de leituras e descansar um pouco.

É isso ai pessoal, melhoramos mais uma query no Protheus.

Até a próxima análise de query.

Gostou desse Post?

Curta, comente, compartilhe com os coleguinhas…

Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

Microsoft Data Platform MVP

2 thoughts on “Melhorando a Performance de Consultas no Totvs Protheus – Parte 6

    1. Olá Danilo,

      Nesse caso, a sacada foi identificar o filtro mais seletivo, a tabela (SZT010) com o maior número de Reads e as colunas dessa tabela que serão utilizadas no JOIN. Depois disso, criamos os índices e o SQL Server utilizou um plano de execução bem melhor. Portanto, antes do JOIN teria o filtro mais seletivo que é por onde o SQL Server irá começar o plano de execução. A criação dos índices é o último passo.

      Abraço.

Deixe uma resposta

%d blogueiros gostam disto: