Nesta postagem , o escritor executa uma consulta várias vezes. Percebo que as leituras lógicas variam um pouco entre as execuções. Há uma diferença de cerca de 2 páginas em um total de alguns milhares de páginas lidas. Parece claro para mim pelo contexto que não haveria atividade de gravação entre os tempos. Se o plano tivesse mudado, eu esperaria uma variação maior do que uma fração de um por cento.
P: quais fatores farão com que o SQL Server relate diferentes contagens de leitura lógica para a mesma consulta na ausência de gravações de dados?
Para uma tabela heap, não há nenhum mecanismo que eu conheça que causaria isso.
Percebo que as leituras lógicas relatadas pelo autor variam apenas quando a compactação é usada. Isso sugere que a reconstrução da tabela foi incluída em cada execução. A instrução de reconstrução não especifica
MAXDOP = 1
, portanto, um plano paralelo teria sido gerado. A maneira como as linhas são distribuídas pelos encadeamentos na reconstrução em tempo de execução não é determinística (depende do tempo), portanto, a estrutura final do heap pode variar. Esta é a única maneira de reproduzir os resultados publicados.Para uma tabela agrupada (ou uma busca/varredura de uma estrutura de índice em geral), as leituras lógicas podem variar devido à atividade de leitura antecipada. A leitura antecipada lê as páginas dos níveis superiores da árvore b para identificar as páginas a serem lidas antes da verificação, resultando em um número variável de leituras lógicas 'extras', dependendo do tempo e das características do sistema de armazenamento. A desativação da leitura antecipada com o sinalizador de rastreamento global 652 pode ser usada para demonstrar isso.
Menciono o aspecto read-ahead apenas para completar, já que a tabela em questão é uma pilha. As varreduras de heap usam leitura antecipada, mas isso é conduzido pelas páginas IAM. As páginas IAM não fazem parte da estrutura da tabela principal (ao contrário dos níveis superiores de uma b-tree), portanto, essas leituras extras não são relatadas por
STATISTICS IO
.