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