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).
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 OPENQUERY
comportamento do SP3 que estava arredondando os números em uma consulta de servidor vinculado entre o SQL Server e o Oracle.