Como o PostgreSQL solicita fisicamente novos registros no disco (após um cluster na chave primária)?

9

Precisa saber como o PostgreSQL solicita registros no disco. Nesse caso, eu gostaria de aproveitar a combinação de índices conforme declarado nos documentos , que, pelo que entendi, usa bitmaps para obter linhas correspondentes e as retorna de acordo com sua localização física. A tabela em questão foi agrupada por sua chave primária.

Pelo que entendi, o PostgreSQL não continua automaticamente fazendo cluster após o término de um cluster (embora lembre-se de que o cluster estava de acordo com um determinado índice). Agora, como essa é a chave primária, pergunto-me se a ordem de armazenamento físico estaria de acordo com aquela (que, se verdadeira, eu gostaria de usar a nosso favor para uma consulta específica).

Em resumo, como o PostgreSQL ordena seus novos registros, especialmente após o clustering?

Muito obrigado!

Juan Carlos Coto
fonte

Respostas:

9

Linhas no postgresql não têm ordem fixa. Os registros não apenas são colocados onde há registros de espaço livre, mas também podem ser movimentados. Isso ocorre porque quando uma linha é atualizada, uma nova versão da linha é criada em um novo local, enquanto a versão antiga permanece em seu local antigo até ser removida pelo vácuo.

As operações CLUSTER classificam todas as linhas, mas de fato não afetam como o postgresql adiciona as linhas. Portanto, os dados não serão classificados. No entanto, o postgresql mantém estatísticas entre as quais a correlação para cada coluna entre a ordem das linhas nas tabelas e a ordem classificada dessa coluna. Portanto, o planejador ainda pode otimizar seu plano com base nas estatísticas que informam que a tabela ainda é classificada principalmente, mesmo que algumas linhas tenham sido adicionadas após uma operação de cluster (ou movidas por atualizações).

Eelke
fonte