O gráfico para esta outra pergunta é para uma tabela de 1 milhão de linhas. Quando desenhado para 10.000 linhas, o gráfico tem uma forma bastante diferente e mais interessante.
Há um platô quando o comprimento da coluna está entre 524 e 903 de comprimento.
Essa forma é vista em meus laptops de trabalho e domésticos. (SQL Server 2017 CU27 e 2017 CU22, 2019 CU8 respectivamente. Ambas as caixas têm 16 GB de RAM.)
As inclinações variam ligeiramente entre as versões.
Isso me faz pensar que é uma escolha de design genuína que foi ajustada em vez de um artefato.
Definir BATCH_MODE_ON_ROWSTORE = OFF para SQL Server 2019 faz pouca diferença. A memória desejada é a mesma em todos os tamanhos, exceto t800, que é 6688kB OFF e 6656kB ON.
Como é que este gráfico tem esta forma? Quais considerações significam que uma solução de três regiões é ideal em contagens de linhas moderadas (10.000 linhas), mas não em contagens de linhas maiores (1 milhão de linhas)?
Entendo que ninguém fora da equipe de desenvolvimento do SQL Server será capaz de afirmar conclusivamente o motivo pelo qual esse gráfico em particular é dessa forma. Mas, de um modo geral, a partir da experiência acadêmica e da indústria, se eu começasse a escrever um módulo de gerenciamento de memória para um DBMS hipotético, que tipo de considerações levaria a esse tipo de resultado?
A concessão de memória é uma estimativa baseada principalmente na cardinalidade esperada e no tamanho médio da linha, além de sobrecargas devido aos detalhes de implementação.
Com doações totais menores, pode-se permitir um pouco mais de 'espaço de manobra' em torno das estimativas (digamos, um fator de 1,4). Com doações maiores, pode-se escolher um fator de correção mais baixo (digamos 1,25).
Também pode haver sobrecargas fixas associadas à memória adicional necessária quando uma classificação excede a memória concedida e precisa se espalhar para o disco. O processamento eficiente de dados derramados pode precisar de algum tipo de 'buffer de saída grande'. Pode-se optar por considerar essa necessidade ou não com um sinalizador de rastreamento como 7470.
Para uma variedade de concessões de memória comuns de tamanho moderado, pode fazer sentido usar uma concessão adicional fixa (digamos 6 MB) em vez de mexer com cálculos pequenos e detalhados que provavelmente não serão exatamente corretos de qualquer maneira. Isso seria em cima de qualquer tamanho de memória fixo necessário (digamos 512 KB) como o tamanho mínimo absoluto das necessidades na memória para a classificação.
Nesse tipo de arranjo, você veria uma parte da linha com uma inclinação em torno de 1,25, outra parte inclinada em torno de 1,4 e uma parte plana no meio, onde uma concessão adicional fixa é selecionada.