​Pessoal, segue as configurações do meu ambiente windows (PostgreSQL 9.2.4):
max_connections = 15
shared_buffers = 512MB
work_mem = 16MB
maintenance_work_mem = 128MB
fsync = off
synchronous_commit = off
full_pages_writes = off
effective_cache_size = 2GB
checkpoint_segments = 150
checkpoint_completion_target = 0.9
autovacuum = off
max_locks_per_transaction = 52048

Máquina física windows seven professional, com processador intel core
I5-2500K CPU 3.30GHZ (4 cores) e 4 GB de ram, 64 bit

configurações do meu ambiente linux (PostgreSQL 9.3.5), consegui uma
máquina com linux para os testes :)
max_connections = 10
shared_buffers = 1228MB
work_mem = 256MB
maintenance_work_mem = 128MB
fsync = off
synchronous_commit = off
full_pages_writes = off
effective_cache_size = 128MB
checkpoint_segments = 150
checkpoint_completion_target = 0.9
autovacuum = off
max_locks_per_transaction = 50064

Máquina virtual com Debian 6.0 squeeze, com processador intel xeon CPU
E5-2407 2.2GHZ (1 core) e 4 GB de ram, 64 bit

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.

Os testes...

Tentei efetuar vacuum full na máquina linux (vacuumdb -v -a -z -f -U
postgres), após quase 3 horas de execução ocorreu out of memory, abaixo
mensagem da tela
DETAIL:  0 dead row versions cannot be removed yet.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
INFO:  analyzing "public.lctoinve_26_2007"
INFO:  "lctoinve_26_2007": scanned 0 of 0 pages, containing 0 live rows and
0 dead rows; 0 rows in sample, 0 estimated total rows
INFO:  vacuuming "public.lctos_26_2007"
INFO:  "lctos_26_2007": found 25830 removable, 25832 nonremovable row
versions in 4686 pages
DETAIL:  0 dead row versions cannot be removed yet.
CPU 3.08s/2.09u sec elapsed 6.50 sec.
INFO:  analyzing "public.lctos_26_2007"
vacuumdb: vacuuming of database "nk" failed: ERROR:  out of memory
DETAIL:  Failed on request of size 836.

real    176m48.716s
user    0m7.276s
sys    0m12.277s
root@debian-x86:~#

mensagem no log do postgres (últimas linhas)

  MdSmgr: 2088960 total in 8 blocks; 529192 free (6 chunks); 1559768 used
  ident parser context: 0 total in 0 blocks; 0 free (0 chunks); 0 used
  hba parser context: 3072 total in 2 blocks; 616 free (1 chunks); 2456 used
  LOCALLOCK hash: 8192 total in 1 blocks; 2880 free (0 chunks); 5312 used
  Timezones: 78520 total in 2 blocks; 5968 free (0 chunks); 72552 used
  ErrorContext: 8192 total in 1 blocks; 8176 free (8 chunks); 16 used
2014-08-07 13:53:38 BRT [2897]: [4-1] user=postgres,db=nk ERROR:  out of
memory
2014-08-07 13:53:38 BRT [2897]: [5-1] user=postgres,db=nk DETAIL:  Failed
on request of size 836.
2014-08-07 13:53:38 BRT [2897]: [6-1] user=postgres,db=nk STATEMENT:
VACUUM (FULL, VERBOSE, ANALYZE);

2014-08-07 13:53:39 BRT [2897]: [7-1] user=postgres,db=nk LOG:
disconnection: session time: 2:56:48.654 user=postgres database=nk
host=[local]

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.
pg_dump: [archiver (db)] query was: SELECT t.tableoid, t.oid, t.relname AS
indexname, pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, t.relnatts
AS indnkeys, i.indkey, i.indisclustered, t.relpages, c.contype, c.conname,
c.condeferrable, c.condeferred, c.tableoid AS contableoid, c.oid AS conoid,
pg_catalog.pg_get_constraintdef(c.oid, false) AS condef, (SELECT spcname
FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS
tablespace, array_to_string(t.reloptions, ', ') AS options FROM
pg_catalog.pg_index i JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid)
LEFT JOIN pg_catalog.pg_constraint c ON (i.indrelid = c.conrelid AND
i.indexrelid = c.conindid AND c.contype IN ('p','u','x')) WHERE i.indrelid
= '623151'::pg_catalog.oid AND i.indisvalid AND i.indisready ORDER BY
indexname

real    32m6.940s
user    0m51.899s
sys    0m19.325s
root@debian-x86:~#

Mensagem no log do postgres

  MdSmgr: 8192 total in 1 blocks; 5704 free (0 chunks); 2488 used
  ident parser context: 0 total in 0 blocks; 0 free (0 chunks); 0 used
  hba parser context: 3072 total in 2 blocks; 616 free (1 chunks); 2456 used
  LOCALLOCK hash: 16769024 total in 11 blocks; 5852960 free (31 chunks);
10916064 used
  Timezones: 78520 total in 2 blocks; 5968 free (0 chunks); 72552 used
  ErrorContext: 8192 total in 1 blocks; 8176 free (9 chunks); 16 used
2014-08-07 14:41:46 BRT [4398]: [1467188-1] user=postgres,db=nk ERROR:  out
of memory
2014-08-07 14:41:46 BRT [4398]: [1467189-1] user=postgres,db=nk DETAIL:
Failed on request of size 52.
2014-08-07 14:41:46 BRT [4398]: [1467190-1] user=postgres,db=nk STATEMENT:
SELECT t.tableoid, t.oid, t.relname AS indexname,
pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, t.relnatts AS
indnkeys, i.indkey, i.indisclustered, t.relpages, c.contype, c.conname,
c.condeferrable, c.condeferred, c.tableoid AS contableoid, c.oid AS conoid,
pg_catalog.pg_get_constraintdef(c.oid, false) AS condef, (SELECT spcname
FROM pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS
tablespace, array_to_string(t.reloptions, ', ') AS options FROM
pg_catalog.pg_index i JOIN pg_catalog.pg_class t ON (t.oid = i.indexrelid)
LEFT JOIN pg_catalog.pg_constraint c ON (i.indrelid = c.conrelid AND
i.indexrelid = c.conindid AND c.contype IN ('p','u','x')) WHERE i.indrelid
= '623151'::pg_catalog.oid AND i.indisvalid AND i.indisready ORDER BY
indexname
2014-08-07 14:41:49 BRT [4398]: [1467191-1] user=postgres,db=nk LOG:
disconnection: session time: 0:32:07.074 user=postgres database=nk
host=[local]


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

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?


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

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

Responder a