Exemplo de atualização de estatísticas do SQL Server perde RANGE_HI_KEY mais alto na coluna de chave crescente

10

Estou tentando entender como a amostragem de estatísticas funciona e se o comportamento abaixo é esperado nas atualizações de estatísticas amostradas.

Temos uma tabela grande particionada por data com alguns bilhões de linhas. A data da partição é a data comercial anterior e, portanto, é uma chave crescente. Apenas carregamos dados nessa tabela para o dia anterior.

O carregamento de dados é executado da noite para o dia, então na sexta-feira, 8 de abril, carregamos os dados para o dia 7.

Após cada execução, atualizamos as estatísticas, apesar de coletarmos uma amostra, e não a FULLSCAN.

Talvez eu esteja sendo ingênuo, mas esperava que o SQL Server identificasse a chave mais alta e a mais baixa do intervalo para garantir que ele obtivesse uma amostra precisa do intervalo. De acordo com este artigo :

Para o primeiro intervalo, o limite inferior é o menor valor da coluna na qual o histograma é gerado.

No entanto, ele não menciona o último intervalo / maior valor.

Com a atualização de estatísticas amostrada na manhã do dia 8, a amostra perdeu o valor mais alto da tabela (o dia 7).

insira a descrição da imagem aqui

Como fazemos muitas consultas sobre dados do dia anterior, isso resultou em uma estimativa imprecisa da cardinalidade e em várias consultas atingindo o tempo limite.

O SQL Server não deve identificar o valor mais alto para essa chave e usá-lo como o máximo RANGE_HI_KEY? Ou esse é apenas um dos limites da atualização sem usar FULLSCAN?

Versão SQL Server 2012 SP2-CU7. No momento, não podemos atualizar devido a uma alteração no OPENQUERYcomportamento do SP3 que estava arredondando os números em uma consulta de servidor vinculado entre o SQL Server e o Oracle.

Mark Sinkinson
fonte

Respostas:

11

O SQL Server não deve identificar o valor mais alto para essa chave e usá-lo como o máximo RANGE_HI_KEY? Ou esse é apenas um dos limites da atualização sem usar FULLSCAN?

É uma limitação da implementação atual das estatísticas amostradas. Tal como está, a coleção de estatísticas amostrada usa TABLESAMPLE SYSTEM, que usa uma varredura de ordem de alocação e escolhe páginas da varredura para a amostra. Apenas as páginas escolhidas contribuem para o histograma.

Como a digitalização é ordenada por alocação (em vez de ordenada por índice), não há como dar preferência à primeira e à última página na ordem das chaves.

Para mais informações, consulte esta pergunta relacionada:

Como a amostragem funciona ao atualizar as estatísticas?

e meu artigo, Verificações de pedidos de alocação

Para soluções alternativas, consulte Estatísticas sobre colunas ascendentes de Fabiano Amorim

Paul White 9
fonte