Lidando com o espaço em disco cheio no postgresql


14

Eu tenho um aplicativo da web Django com back-end postgresql 9.3.10 (sentado em um sistema operacional Linux). Corri para o erro de disco cheio, de modo que, mesmo se eu tentar truncar uma tabela, recebo erros do tipo:

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.

Não posso adicionar facilmente mais espaço em disco ao servidor, nem excluir coisas nesta VM. No entanto, existem várias tabelas candidatas a truncamento, mas parece que também não posso truncá-las agora.

Alguém pode me dar conselhos sobre o que posso fazer aqui? Isso está afetando bastante meu servidor de produção, e eu sou um DBA acidental aqui, tão totalmente perplexo.


Você pode recuperar algum espaço se você pode (temporariamente) soltar um tabelas de índice ... Truncar e, em seguida, recriá-lo
joanolo

Respostas:


9

Como o PostgreSQL deve escrever o WAL antes de fazer alterações nas tabelas, ele precisa de espaço livre em disco para excluir as coisas e liberar mais espaço em disco.

Se você deixar o disco encher, não poderá se recuperar no PostgreSQL. Mesmo TRUNCATEainda tem que escrever para o WAL.

Portanto, você deve liberar espaço no volume ou expandir o volume. Se os arquivos de log do PostgreSQL estiverem no pg_logdiretório de dados, você poderá remover com segurança alguns deles e reiniciar a página.

Você não exclua pg_xlogou pg_clog. Esses não são logs de erro do servidor, são partes críticas do banco de dados, do log de transações e do commit.


Por que TRUNCATEtem que escrever para wal e como é essa entrada no WAL?
Evan Carroll

"truncate não registra os dados completos, apenas o fato de ter ocorrido um truncado. Para poder recuperá-lo, o arquivo subjacente é mantido até a confirmação da transação." [fonte] ( postgresql.org/message-id/… Portanto, a entrada do truncado na parede é super pequena. meros bytes. Se essa era a carga de espaço necessária, você provavelmente poderia obtê-la rm -rf /tmp/*ou excluir seu vimrc.
Evan Carroll

@EvanCarroll rm -rf /tmp/*... que também pode excluir coisas que você pode querer, como soquetes de aplicativos etc. É melhor ser mais seletivo. Quanto espaço necessário, você está certo, é mínima - um 8k mesa vazia + alguns kb de entradas WAL para o truncado, alocação XID, cometer registro, etc.
Craig Ringer
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.