Estou executando o postgres (postgis) 9.4.2 em um mac (10.10.4).
Eu tenho algumas mesas grandes (várias TBs).
Durante uma construção de índice em uma delas que leva cerca de uma semana, observei o espaço disponível em HD cair, como seria de esperar quase no ponto em que o índice seria concluído quando uma falta de energia durasse mais que a unidade de bateria e o sistema foi abaixo. Eu tive buffers off e fillfactor=100
durante a compilação, pois é uma fonte de dados estática. Na reinicialização, o espaço disponível restante na unidade está exatamente onde estava quase no final da compilação do índice. A análise a vácuo não libera espaço.
Tentei largar a mesa e reinserir, e isso não deixou espaço. Agora estou em um lugar onde não tenho espaço suficiente para criar o índice.
Os arquivos gerados durante a compilação do índice estão presos em algum limbo em que não podem ser removidos pelo sistema devido à maneira como a máquina caiu durante a queda de energia?
Quando olho para os tamanhos de tabela + índices no banco de dados (que são os únicos dados nessa unidade), eles somam cerca de 6 TB . A unidade possui 8 TB e restam menos de 500 GB na unidade, portanto parece que há cerca de 1,5 TB perdidos em algum lugar, aproximadamente o tamanho que esse índice teria.
Alguma ideia?
fonte
SELECT r.relname, r.relkind, n.nspname FROM pg_class r INNER JOIN pg_namespace n ON r.relnamespace = n.oid WHERE relkind = 'i';
SELECT indexrelid::regclass, indrelid::regclass FROM pg_catalog.pg_index WHERE NOT indisvalid;
lhe dê?Respostas:
Normalmente, esperamos que, quando o postgres for reiniciado, o processo de recuperação de falhas remova arquivos relacionados a um índice de reversão do diretório de dados.
Vamos supor que não funcionou, ou pelo menos que deve ser verificado manualmente.
A lista de arquivos que devem estar no datadir pode ser estabelecida com uma consulta como esta:
reltablespace=0
é para o espaço de tabela padrão. Se o índice problemático foi criado em um espaço de tabela não padrão, ele0
deve ser substituído por seu OID empg_tablespace
.i, r, t, S, m in
relkind
correspondem, respectivamente, a índices, tabelas, espaço de brinde, sequências, visualizações materializadas. Todos esses objetos têm seus dados em arquivos cujos nomes correspondempg_relation_filenode(oid)
.No disco, os arquivos de dados estão abaixo de
$PGDATA/base/oid/
ondeoid
éoid
o banco de dados obtido porselect oid,datname from pg_database
. Se não estamos falando sobre o espaço de tabela padrão,base
é substituído porPG_version_somelabel
.Listar e classificar os arquivos correspondentes aos arquivos de relfil nesse diretório:
(que na verdade mantém apenas o primeiro segmento para relações maiores que 1 Gb. Se houver segmentos remanescentes não anexados a algo, eles devem ser considerados separadamente)
e diferencie esse arquivo com o resultado da consulta acima.
Se houver arquivos de dados remanescentes que não correspondam a nenhum objeto que o banco de dados conheça, eles deverão aparecer nessa comparação.
fonte