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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top