13.4. Carga dos dados no banco

Pode ser necessário efetuar um grande número de inserções em tabelas para fazer a carga inicial do banco de dados. Abaixo são mostradas algumas dicas e técnicas para tornar esta carga a mais eficiente possível.

13.4.1. Desabilitar a efetivação automática

Desabilitar a efetivação automática (autocommit) e fazer apenas uma efetivação no final (Em puro SQL, isto significa executar BEGIN no começo e COMMIT no fim. Algumas bibliotecas cliente podem fazer isto às escondidas e, neste caso, é preciso ter certeza que a biblioteca só faz quando se deseja que seja feito). Se permitirmos efetivar cada inserção separadamente, o PostgreSQL terá muito trabalho para cada linha inserida. Um benefício adicional de fazer todas as inserções em uma transação, é que se a inserção de uma linha não for bem-sucedida, então é cancelada a inserção de todas as linhas feita até este ponto, não havendo necessidade de se preocupar com a carga parcial dos dados.

13.4.2. Uso do COPY FROM

Em vez de usar uma série de comandos INSERT, deve ser usado o comando COPY FROM STDIN para carregar todas as linhas através de um único comando, obtendo uma redução substancial do esforço de análise, planejamento, etc. Se isto for feito então não será necessário desabilitar a efetivação automática, porque se trata de um único comando.

13.4.3. Remoção dos índices

Se estiver sendo carregada uma tabela recém criada, a maneira mais rápida é criar a tabela, carregar os dados usando o COPY e, depois, criar os índices necessários para a tabela. Criar um índice sobre dados pré-existentes é mais rápido que atualizá-lo de forma incremental durante a carga de cada linha.

Para aumentar uma tabela existente, pode-se remover o índice, carregar a tabela e, depois, recriar o índice. É claro que o desempenho do banco de dados para os outros usuários será afetado negativamente durante o tempo que o índice não existir. Deve-se pensar duas vezes antes de remover um índice único, porque a verificação de erro efetuada pela restrição de unicidade não existirá enquanto o índice não tiver sido criado novamente.

13.4.4. Aumento de sort_mem

O aumento temporário da variável de configuração sort_mem ao se restaurar uma grande quantidade de dados pode ocasionar uma melhora no desempenho. Isto se deve ao fato de quando o índice B-tree é criado a partir do início, o conteúdo presente na tabela precisa ser ordenado. Permitir o merge sort [1] utilizar mais páginas de buffer significa que menos passagens de mesclagem serão necessárias.

13.4.5. Depois executar o comando ANALYZE

Aconselha-se executar o comando ANALYZE ou VACUUM ANALYZE sempre que forem adicionados ou atualizados muitos dados, inclusive logo após a carga inicial da tabela. Este procedimento garante que o planejador possuirá estatísticas atualizadas sobre a tabela. Sem estatísticas, ou com estatísticas obsoletas, o planejador pode tomar decisões ineficientes durante o planejamento dos comandos, ocasionando um desempenho fraco nas tabelas com estatísticas imprecisas ou não existentes.

Notas

[1]

merge sort — Um algoritmo de classificação que divide os itens a serem classificados em dois grupos, classifica cada grupo recursivamente e, depois, mescla os grupos em uma seqüência classificada final. National Institute of Standards and Technology (N. do T.)

SourceForge.net Logo