Arquivos de temperatura a vácuo PostGresql?
-
21-09-2019 - |
Pergunta
Eu tenho um "pequeno" problema. Há uma semana, meu banco de dados estava atingindo a capasidade completa do disco. Excluí muitas linhas em diferentes tabelas tentando liberar espaço em disco. Depois de que tentei executar um aspirador completo, o que não completou.
O que eu quero saber é. Quando parei o vácuo de complementar, ele deixa os arquivos temp no disco que tenho que excluir a manualidade? Agora, tenho um banco de dados que está em uma capasidade de disco 100%, o que desnecessariamente dizer é um grande problema.
Alguma dica para o espaço livre em disco?
Estou executando o SUSE com um banco de dados Postgres 8.1.4.
Solução
Em primeiro lugar:
MELHORIA
Mesmo se você não puder para 8.2, 8.3 ou 8.4 - pelo menos atualizar para o mais novo 8.1 (que é 8.1.17 no momento, mas será 8,1.18 em 1-2 dias).
Segundo: diagnosticar qual é o problema.
Usar du ferramenta para diagnosticar para onde exatamente o espaço foi. Qual diretório está ocupando muito espaço?
Verificar com df O que é o espaço total usado e, em seguida, verifique quanto disso é o diretório PostgreSQL.
A melhor opção é:
cd YOUR_PGDATA_DIR
du -sk *
cd base
du -sk *
cd LARGEST DIR FROM PREVIOUS COMMAND
du -sk * | sort -nr | head
Agora, você sabe qual diretório em PGDATA está usando o espaço, você pode fazer algo a respeito.
Se forem logs ou pg_temp - reinicie PG ou remova logs (pg_clog e pg_xlog não são logs no significado comum da palavra, nunca exclua nada de lá!).
Se for algo no seu diretório base, então:
Diretórios numéricos no diretório básico estão relacionados a bancos de dados. Você pode verificar com:
select oid, datname from pg_database;
Quando você conhece o banco de dados que está usando a maior parte do espaço, conecte -se a ele e verifique quais arquivos estão usando a maior parte do espaço.
Os nomes dos arquivos serão numéricos com o sufixo opcional ".Digits" - esse sufixo é (por enquanto) irrelevante e você pode verificar o que exatamente o arquivo representa ao emitir:
select relname from pg_class where relfilenode = <NUMBER_FROM_FILE_NAME>;
Depois de saber quais tabelas/índices usam a maior parte do espaço - você pode aspirá -lo com o problema ou (muito melhor) CONJUNTO comando sobre eles.
Outras dicas
Na nova tangente ao seu problema, você pode descobrir o que no banco de dados está usando muito espaço usando um consulta. Isso pode ajudá -lo a localizar candidatos para truncar para recuperar o espaço de trabalho suficiente para limpar os com informações excluídas.
Observe que a exclusão de muitas linhas, mas não aspira com frequência o suficiente para manter o espaço do disco sob controle, geralmente leva a uma condição chamada Index Bloat, com a qual o vácuo completo não ajuda. Você saberá que você está lá quando a consulta que eu sugeri a programas a maior parte do seu espaço é ocupada por índices, em vez de tabelas regulares. Você precisará de cluster, que precisa de tanto espaço em disco livre quanto a própria tabela para reconstruir tudo, para se recuperar desse problema.