Tenho uma tabela particionada com uma chave primária rowstore e um índice columnstore não clusterizado. A chave principal de ambos (não que a ordem das chaves importe para o columnstore) é a mesma. Ao atualizar estatísticas, o SQL Server opta regularmente por varrer o índice columnstore. Isso demora muito para o meu gosto, então tentei
UPDATE STATISTICS My_Table
WITH PERSIST_SAMPLE_PERCENT = ON, SAMPLE 3 PERCENT
Para minha surpresa, as atualizações de estatísticas ainda demoravam muito. Os planos de execução sugerem que o índice do columnstore está sendo escaneado da mesma forma que antes.
Então, tenho uma pergunta: ao ler um índice columnstore, PERSIST_SAMPLE_PERCENT é ignorado em UPDATE STATISTICS? As atualizações automáticas de estatísticas parecem compartilhar esse problema.
Atualização: Suspeito que o problema pode ser o bitmap excluído.
É quase certo que isso se deve ao fato de a tabela que eu estava estudando estar altamente fragmentada. Esses experimentos brutais sugerem que os planos de execução relatam com precisão as taxas de amostragem dos índices do columnstore e que essas taxas de amostragem correspondem ao que foi persistido. No entanto, parece que o Evento Estendido auto_stats não é tão honesto.
Você pode testar isso facilmente executando a seguinte consulta após executar o
UPDATE STATISTICS
código comPERSIST_SAMPLE_PERCENT = ON
. Você pode observarRows
,NumberofSamplingrows
eSamplePercent
fazer cálculos simples para calcular a porcentagem de linhas amostradas. Ele também mostrará a porcentagem de amostragem persistente naPersistedSamplePercent
coluna. Às vezes, pode haver um erro de 1% (especialmente em tabelas com menor número de registros).Referência: Taxa de amostragem persistente para atualizações automáticas de estatísticas do SQL Server por Rajendra Gupta