Reduz o tamanho do acúmulo misterioso principal / base

2

Usando o PostgreSQL 9.3. Eu tive uma consulta de longa duração atualizando em torno de 8 milhões de linhas. Algo obviamente deu errado. 2 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 isso seja uma transação temporária que se acumulou.

Existem algumas postagens on-line sobre problemas semelhantes, mas nenhuma solução canônica que eu encontrei. Em geral, o conselho é "executar VÁCUO CHEIO" e às vezes o lixo acumulado desaparece. É o que estou fazendo agora, mas está demorando e tenho medo de preencher o espaço em disco restante (3 GB) e derrubar tudo.

Alguém teve experiência com isso? O que é armazenado aqui? Existe uma maneira segura de liberar rapidamente este espaço? Ou pelo menos mova-o para outro lugar (eu tenho muito espaço nos meus discos de tablespace).

    
por panta82 03.03.2015 / 11:38

1 resposta

2

Eu percebi isso. É um erro meu. Este é um novo banco de dados criado por um colega no espaço de tabela padrão, em vez de um dos nossos personalizados.

Para aqueles com problemas semelhantes, aqui estão algumas coisas que aprendi enquanto investigava. base/22053373 no meu caso é oid de um banco de dados. Você pode ver qual db é assim:

SELECT oid, * FROM pg_database

Cada arquivo dentro é nomeado após oid de um tipo pg (tabela ou outro). Os maiores arquivos são provavelmente de suas maiores tabelas. Conecte-se ao banco de dados e selecione a coleção pg_class para descobrir qual.

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

ALTER DATABASE mydb SET TABLESPACE mytablespace;

Tenho certeza de que isso resolverá meu problema.

    
por 03.03.2015 / 17:14