Reduza o tamanho do acúmulo misterioso principal/base

Reduza o tamanho do acúmulo misterioso principal/base

Usando PostgreSQL 9.3. Tive uma consulta de longa duração atualizando cerca de 8 milhões de linhas. Obviamente algo deu errado. Dois dias depois, recebi um alerta de pouco espaço em disco. Parei a consulta e foi isso que vi.

root@server:/var/lib/postgresql/9.3/main# du -BM * | sort -n
1M  global
1M  pg_notify
1M  pg_serial
1M  pg_snapshots
1M  pg_stat
1M  pg_stat_tmp
1M  pg_tblspc
1M  pg_twophase
1M  PG_VERSION
1M  pg_xlog/archive_status
1M  mydb.opts
1M  mydb.pid
3M  pg_subtrans
7M  base/1
7M  base/12030
7M  base/12035
11M base/22029472
21M pg_clog
72M pg_multixact/offsets
315M    pg_log
444M    pg_multixact/members
516M    pg_multixact
625M    pg_xlog
3493M   base/pgsql_tmp
61851M  base/22053373
65372M  base

Observe isto:61851M base/22053373

Como meus dados reais estão em espaços de tabela armazenados em volumes diferentes, presumo que se trate de alguma transação temporária que se acumulou.

Existem algumas postagens on-line sobre problemas semelhantes, mas nenhuma solução canônica que encontrei. Em geral, o conselho é “executar VACUUM FULL” e às vezes o lixo acumulado desaparece. É isso que estou fazendo agora, mas está demorando e tenho medo de ocupar o espaço restante em disco (3 GB) e fazer tudo desabar.

Alguém já teve experiência com isso? O que está armazenado aqui? Existe uma maneira segura de liberar rapidamente esse espaço? Ou pelo menos mova-o para outro lugar (tenho bastante espaço nos discos do meu espaço de tabela).

Responder1

Eu descobri. É um erro meu. Este é um novo banco de dados que um colega criou no espaço de tabela padrão, em vez de um dos nossos bancos personalizados.

Para aqueles que estão enfrentando problemas semelhantes, aqui estão algumas coisas que aprendi durante a investigação. base/22053373no meu caso é fora de um banco de dados. Você pode ver qual banco de dados é assim:

SELECT oid, * FROM pg_database

Cada arquivo dentro dele recebe o nome de oid de um tipo pg (tabela ou outro). Os arquivos maiores provavelmente são das suas tabelas maiores. Conecte-se ao banco de dados e selecione na pg_classcoleção para descobrir qual.

No momento estou movendo o banco de dados para um espaço de tabela personalizado usando

ALTER DATABASE mydb SET TABLESPACE mytablespace;

Tenho certeza que isso resolverá meu problema.

informação relacionada