​Pessoal, segue as configurações do meu ambiente windows (PostgreSQL 9.2.4):

ATUALIZE PARA 9.2.9.
É seu primeiro passo, ponto.

(...)

max_locks_per_transaction = 52048

VOcê não vai conseguir fazer o dump por causa desta configuração.
O número aqui precisa ser maior que o número de tabelas envolvidas.

Máquina física windows seven professional, com processador intel core
(...)
max_locks_per_transaction = 50064

Idem.

Trata-se de um sistema legado desktop, onde estão migrando de banco de
dados. O banco de dados antigo é baseado em arquivos .BTR e estão em
fase de testes com o postgres, então, no momento, os servidores estão em
uso apenas para testes.

Não é possível utilizar schemas (neste momento) visto isso ser uma
particularidade da aplicação, primeiro temos que efetuar a migração para
depois alterar a aplicação para utilizar o conceito de schemas.

Ok.

Os testes...

Tentei efetuar vacuum full na máquina linux (vacuumdb -v -a -z -f -U

Pra quê?
Sugeri que você fizesse um VACUUM FULL no catálogo.
Você está usando a máquina para testes, não há porque fazer VACUUM FULL no banco de dados todo.

(...)

vacuumdb: vacuuming of database "nk" failed: ERROR:  out of memory
DETAIL:  Failed on request of size 836.

Diminua maintenance_work_mem.
Mas, na boa, não faça esse VACUUM FULL. Não faz sentido e vai demorar horas e horas.

(...)
Tentei efetuar dump, mas também ocorreu out of memory após 32 minutos
(detalhe, nem tinha começado a parte dos copy)

Mensagem da tela

root@debian-x86:~# time /opt/PostgreSQL/9.3/bin/pg_dump -U postgres -x
-O -Fc nk > /opt/PostgreSQL/9.3/dump_nk.sql
pg_dump: [archiver (db)] query failed: ERROR:  out of memory
DETAIL:  Failed on request of size 52.

Diminua work_mem.
Atualize PostgreSQL para 9.2.9 (no momento desta mensagem é a mais recente das 9.2).

Agora, na máquina windows, o vacuum full está rodando a quase 6 horas,
espero que termine... :)

Se não terminou cancele.

Creio que a diferença de no linux ocorrer out of memory e no windows não
se deve ao fato de que o windows está em uma máquina física e com mais
poder de processamento, certo?

Não. Há vários fatores envolvidos. O gerenciamento de memória nos sistemas operacionais é diferente. O Windows por exemplo não tem o conceito de System V IPC e o PostgreSQL o emula desde a versão 8.0.

Mas, é claro, se uma máquina tem mais memória disponível, o out-of-memory vai demorar mais para aparecer ou até mesmo não aparecer de fato.

No caso dos out-of-memory em processos como você está vendo, diminua um pouco work_mem e maintenance-work-mem. Provavelmente você está tomando OOM Kill. Ah, na sua máquina virtual, diminua bem shared_buffers. Ele toma praticamente toda a sua memória e não sobra espaço pros outros processos.



Pessoal, desculpa se a minha resposta as perguntas ficou grande, e
principalmente por ter respondido como top-posting :)

Sem problemas. É melhor ter um monte de informações úteis pra agilizar sua resposta e solução pro seu problema.

[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a