O ponto de inflexão é um termo que ouvi pela primeira vez usado pelo guru de ajuste de desempenho do SQL Server e membro de longa data do SentryOne Advisory Board, Kimberly Tripp – ela tem uma ótima série de blog sobre isso aqui. O ponto de inflexão é o limite no qual um plano de consulta “inclinará” da busca de um índice não clusterizado não abrangente para a varredura do índice clusterizado ou heap. A fórmula básica, que não é uma regra rígida e rápida, pois existem vários outros fatores que influenciam, é esta:
- Uma verificação de índice clusterizado (ou tabela) geralmente ocorre quando as linhas estimadas excedem 33% do número de páginas na tabela
- Uma pesquisa de busca e chave não agrupada geralmente ocorre quando as linhas estimadas estão abaixo de 25% das páginas na tabela
- Entre 25% e 33%, pode ocorrer de qualquer maneira
Observe que há outros "pontos de inflexão" do otimizador, como quando uma cobertura índice mudará de uma busca para uma varredura, ou quando uma consulta for paralela, mas o que estamos focados é o índice não clusterizado não coberto cenário porque tende a ser o mais comum – é difícil cobrir todas as consultas! Também é potencialmente mais perigoso para o desempenho e, quando você ouve alguém se referir ao ponto de inflexão do índice do SQL Server, geralmente é isso que eles querem dizer.
O ponto crítico nas versões anteriores do Plan Explorer
O Plan Explorer mostrou anteriormente o efeito líquido do ponto de inflexão quando a detecção de parâmetros está em jogo na Análise de índice guia, especificamente por meio da Operação estimada linha nos Parâmetros painel:
A operação estimada para os parâmetros compilados e de tempo de execução, com base no número de linhas
Se você ainda não explorou o módulo de Análise de Índice, eu o encorajo a fazê-lo. Embora o diagrama de plano e outros recursos do Plan Explorer sejam ótimos, francamente, a Análise de Índice é onde você deve passar a maior parte do tempo ao ajustar consultas e índices. Confira a revisão detalhada de recursos e cenários de Aaron Bertrand aqui, e um ótimo tutorial de índice de cobertura de Devon Leann Wilson aqui.
Nos bastidores, fazemos a matemática do ponto de inflexão e prevemos a operação de índice (busca ou varredura) com base nas linhas estimadas e no número de páginas na tabela para os parâmetros compilados e de tempo de execução e, em seguida, codificamos com cores as células associadas para que você pode ver rapidamente se eles correspondem. Se não, como no exemplo acima, pode ser um forte indicador de que você tem um problema de detecção de parâmetros.
O Histograma de Estatísticas O gráfico reflete a distribuição de valores para a chave principal do índice usando colunas para linhas iguais (laranja) e linhas de intervalo (azul). Esses são os mesmos valores que você obterá de DBCC SHOW_STATISTICS ou sys.dm_db_stats_histogram . As partes da distribuição que estão sendo atingidas pelos parâmetros compilados e de tempo de execução são destacadas para fornecer uma ideia aproximada de quantas linhas estão envolvidas para cada uma. Basta selecionar o Valor compilado ou Valor do tempo de execução coluna para ver o intervalo selecionado:
Gráfico de histograma mostrando o intervalo atingido pelos parâmetros de tempo de execução
Novos controles e recursos visuais
Os recursos acima eram bons, mas por um tempo senti que havia mais que poderíamos fazer para tornar as coisas mais claras. Portanto, na versão mais recente do Plan Explorer (2020.8.7), a parte inferior do painel Parâmetros tem alguns novos controles com visuais associados no gráfico de histograma:
Novos controles para visuais de histograma
Observe que o histograma mostrado por padrão é para o índice usado pela consulta para acessar a tabela selecionada, mas você pode clicar em qualquer outro cabeçalho de índice ou coluna da tabela na grade para visualizar outro histograma.
Intervalo do ponto de virada
O Intervalo do ponto de virada caixa de seleção alterna a faixa vermelha clara mostrada no gráfico de histograma:
Alternar para banda de intervalo do ponto de inflexão
Se as linhas estimadas estiverem abaixo desse intervalo, o otimizador favorecerá uma busca + pesquisa e, acima dela, uma varredura de tabela. Dentro do intervalo é uma incógnita.
Linhas estimadas/reais
As Linhas Est/Real caixa de seleção alterna a exibição de linhas estimadas (dos parâmetros compilados) e linhas reais (dos parâmetros de tempo de execução). As setas no gráfico abaixo ilustram a relação entre este controle e os elementos associados:
Alternar entre linhas estimadas e reais no gráfico de histograma
Neste exemplo, fica claro que as linhas estimadas estão abaixo do ponto de inflexão e as linhas reais retornadas estão acima dele, o que se reflete na diferença entre as operações estimadas e reais listadas (Busca vs Varredura). Este é o sniffing de parâmetro clássico, ilustrado!
Em um post futuro, detalharei como isso se correlaciona com o que você vê no diagrama de plano e na grade de instruções. Enquanto isso, aqui está um arquivo de sessão do Plan Explorer que contém este exemplo (sniffing de parâmetro search-to-scan), bem como um exemplo de scan-to-seek. Ambos aproveitam o banco de dados WideWorldImporters expandido.
Linhas de intervalo ou linhas de intervalo médio
Versões anteriores do Plan Explorer empilhavam as linhas iguais e as linhas de intervalo em uma coluna para representar o número total de linhas em um bucket de histograma. Isso funciona bem quando você tem um predicado de desigualdade ou intervalo, como mostrado acima, mas para predicados de igualdade não faz muito sentido. O que você realmente quer ver são as linhas do intervalo médio, pois é isso que o otimizador usará para a estimativa. Infelizmente, não havia como conseguir isso.
No novo histograma do Plan Explorer, em vez de uma série de colunas empilhadas, agora usamos colunas agrupadas com linhas iguais e linhas de intervalo lado a lado e você controle se deseja mostrar as linhas de intervalo total ou médio conforme apropriado usando as Linhas de intervalo / Linhas de intervalo médio seletor. Mais sobre isso em breve…
Encerrando
Estou muito empolgado com esses novos recursos e espero que você os ache úteis. Experimente-os baixando o novo Plan Explorer. Esta foi apenas uma breve introdução, e estou ansioso para cobrir alguns cenários diferentes aqui. Como sempre, deixe-nos saber o que você pensa!