Do documento postgresql, eu sei que o vácuo pode pular páginas que já estão marcadas no mapa de visibilidade, então o vácuo progride apenas páginas de vácuo que requerem vácuo, e chamamos isso de vácuo parcial; Às vezes, todas as páginas de uma tabela requerem aspiração para remover a versão de linha morta, chamamos essa mesa inteira de vácuo (não vácuo completo). Minha pergunta é: como podemos ver se um vácuo é um vácuo parcial ou um vácuo de tabela inteira, o seguinte é a saída do vácuo verboso comum, podemos julgar a partir disso?
--vacuum detalhado mydb=> vacuo verbose test_vacuum2; INFO: aspirando "mydb.test_vacuum2" INFO: "test_vacuum2": encontrou 0 versões de linha removíveis e 774 não removíveis em 5 de 5 páginas DETALHE: 0 versões de linhas mortas ainda não podem ser removidas. Havia 226 ponteiros de itens não utilizados. 0 páginas estão totalmente vazias. CPU 0,00s/0,00u seg decorrido 0,00 seg. VÁCUO
Não acho que você possa dizer pela lista "detalhada" se alguma página foi ignorada porque era conhecida por conter apenas tuplas visíveis.
Eu acho que ele só irá limpar as páginas sinalizadas como "todas visíveis" se decidir congelar as tuplas na tabela, seja por causa da aproximação da transação envolvente ou porque você executou explicitamente
VACUUM
aFREEZE
opção. (Se você usar ovacuumdb
executável de linha de comando, esta é a-F
opção.)Em nossa loja complementamos a atividade de autovacuum com um agendamento
VACUUM FREEZE ANALYZE
no banco de dados fora do horário de pico. Isso minimiza a sobrecarga do autovacuum durante os horários de pico e melhora ligeiramente o desempenho da consulta, porque as verificações de visibilidade são mais simples.