Problemas com campos maiores que 300MB no pg_dump

Publicado por Alexandre em 22/09/2010

[ Hits: 8.730 ]

 


Problemas com campos maiores que 300MB no pg_dump



Venho desenvolvendo diversos projetos que integram o Postgres (8.3, 8.4) como solução de SGBD, solução que sempre atendeu as expectativas dos nossos projetos, de todos os pontos de vistas esperados de um SGBD.

Capacidades do pg_dump:
  • Tamanho máximo de um banco: Ilimitado
  • Tamanho máximo de uma tabela: 64TB
  • Tamanho máximo de um registro: Ilimitado
  • Tamanho máximo de um campo: 1GB
  • Máximo de linhas numa tabela: Ilimitado
  • Máximo de colunas numa tabela: 1600
  • Máximo de índices numa tabela: Ilimitado

Venho relatar um problema no pg_dump. Como podem ver neste trecho retirado da documentação do Postgres, o tamanho máximo de um campo é de 1GB, em testes o banco de dados realmente suportou! Porém se você tiver um campo acima de 300MB, muito provavelmente não conseguirá fazer o backup desta tabela do seu banco de dados, pois inexplicavelmente o pg_dump aloca uma quantidade muito grande de memória para fazer um backup de um registro deste tamanho.

Segue a mensagem de erro apresentada para o seguinte comando de backup:

# /usr/bin/pg_dump -d -D -F c --disable-triggers --verbose -f "/backup/arquivo.bkp"
pg_dump: saving database definition
pg_dump: SQL command failed
pg_dump: Error message from server: ERRO: invalid memory alloc request size 1353567981
pg_dump: The command was: FETCH 100 FROM _pg_dump_cursor
pg_dump: *** aborted because of error

Embora o erro não informe a unidade em que está o número considerando que esteja em bytes, isto estaria próximo de 1.3G, que é uma quantidade aceitável de memória em se tratando de servidores. O que posso inferir é que este número não está em bytes, pois o servidor que estava realizando esta rotina estava com 8G de memória RAM mais 8G de swap, que no momento do backup estava com 0% de utilização.

Conclusão

Se quiser fazer backup de seu banco de dados postgres com pg_dump, não tenha registros maiores que 300MB em seu banco.

Outra observação quanto ao uso do pg_dump é o fato dele não dividir o processamento do backup concorrentemente.

Em servidores com 8 processadores a aplicação roda 100% apenas em 1, enquanto os outros 7 ficam ociosos e os discos ociosos também, devido a demora do processamento. A solução neste caso pode ser fazer manualmente o backup de cada tabela separadamente.

Outras dicas deste autor

Criação de 1° super usuário no PostgreSQL

Montar pastas via SSH Linux

Leitura recomendada

Montando imagens criadas pelo dd de um dispositivo RAID

Adicionando múltiplos usuários no Linux com VIM

Acessando partições NTFS (read/write) com ntfs-3g (Slackware Linux 12)

LVM (Logical Volume Manager)

Dividindo arquivos grandes em vários disquetes

  

Comentários
[1] Comentário enviado por rony_souza em 03/10/2010 - 21:09h

Boa dica...

(:



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts