Diferença entre o fator de preenchimento da tabela e o fator de preenchimento do índice


16

No Postgres, é possível definir o fator de preenchimento para um índice e também para uma tabela. Qual é a diferença? Como decidir valores para qualquer um. Quais são os casos de uso?

Estou tentando agrupar uma relação espacial em um índice espacial. Tem alguns milhões de registros. Os registros são atualizados o tempo todo, embora muito poucos novos sejam criados diariamente.

O caso de uso são consultas de intervalo espacial. Qual será um bom valor para o fator de preenchimento da tabela e / ou o fator de preenchimento do índice?

Respostas:


12

Na página de manual CREATE TABLE (ênfase adicionada):

O fator de preenchimento de uma tabela é uma porcentagem entre 10 e 100. 100 (embalagem completa) é o padrão. Quando um fator de preenchimento menor é especificado, as operações INSERT empacotam as páginas da tabela apenas para a porcentagem indicada; o espaço restante em cada página é reservado para atualizar linhas nessa página. Isso permite que o UPDATE coloque a cópia atualizada de uma linha na mesma página que o original, o que é mais eficiente do que colocá-la em uma página diferente. Para uma tabela cujas entradas nunca são atualizadas, a embalagem completa é a melhor opção, mas em tabelas altamente atualizadas os fatores de preenchimento menores são adequados.

Na página de manual CREATE INDEX (ênfase adicionada):

O fator de preenchimento de um índice é uma porcentagem que determina o quanto o método de índice tentará compactar as páginas de índice. Para árvores B, as páginas folha são preenchidas com essa porcentagem durante a criação inicial do índice e também ao estender o índice à direita (maiores valores-chave). Se as páginas subseqüentemente ficarem completamente cheias, elas serão divididas, levando a uma degradação gradual na eficiência do índice.As árvores B usam um fator de preenchimento padrão de 90, mas qualquer valor de 10 a 100 pode ser selecionado. Se a tabela for estática, o fator de preenchimento 100 é melhor para minimizar o tamanho físico do índice, mas para tabelas altamente atualizadas, um fator de preenchimento menor é melhor para minimizar a necessidade de divisões de página. Os outros métodos de índice usam o fator de preenchimento de maneiras diferentes, mas aproximadamente análogas; o fator de preenchimento padrão varia entre os métodos.


11
É costume mencionar a fonte de uma cotação. Mesmo que seja fácil descobrir.
Erwin Brandstetter

sim, claro) esquecer às vezes ...

Desculpe incomodar um pouco mais. Por favor, vincule à versão atual do manual (a menos que você precise abordar uma em particular). Eu editei. Mais sobre isso aqui .
Erwin Brandstetter

Os links estão ao contrário.
Dave Johansen

2
Re: "Se a tabela é estática, o fator de preenchimento 100 é melhor para minimizar o tamanho físico do índice, mas para tabelas altamente atualizadas, um fator de preenchimento menor é melhor para minimizar a necessidade de divisões de páginas". Tentando entender o contexto de "tabelas altamente atualizadas" - isso significa tabela com valores de linha altamente atualizados ou talvez também inclua tabelas com linhas frequentemente inseridas e / ou excluídas? Eu queria saber se minha tabela, com poucas alterações nos valores de linha, mas inserções e exclusões extensas, pode se beneficiar do menor fator de preenchimento no seu índice principal (chave).
Reinsbrain
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.