Data pump mais rápido com paralelismo
Introdução
Estou escrevendo este artigo para compartilhar algo que testei recentemente e que consiste em utilizar paralelismo ao exportar dados via Data Pump. Usar o Data Pump para importar e exportar dados faz parte da rotina quase que diária de um DBA que administra Bancos de Dados Oracle (a partir da versão 10G). Normalmente utilizo o Data Pump para importar e exportar pequenas quantidades de dados, em média 15 GB, que demoram aproximadamente 30 minutos para gerar um dump.
Obs.: Dump é o nome dado a um arquivo que contém os dados que são exportados de um Banco de Dados (BD) e que podem ser posteriormente importados em qualquer BD.
Quando precisamos trabalhar com grandes quantidades de dados, podemos utilizar paralelismo no DataPump para reduzir o tempo de geração dos dumps. Paralelismo, neste caso, consiste em utilizar múltiplos processadores (ou núcleos) no processo de exportação ou importação de dados, para otimizar o tempo destes processos. Como nunca precisei gerar dumps muito grandes e com muita urgência, sempre utilizei o Data Pump sem utilizar recursos de paralelismo.
Visando me preparar para uma eventual e futura necessidade, resolvi fazer alguns testes para verificar o ganho de performance ao exportar dados com múltiplos processadores e vou compartilhar essa experiência com vocês. Um detalhe muito importante é que ao utilizar múltiplos processadores neste processo você só terá melhor desempenho se a exportação gerar múltiplos arquivos de dump. Para gerar múltiplos arquivos com o utilitário expdp, é necessário acrescentar no valor do parâmetro DUMPFILE, a variável %u, que permite gerar um nome único para cada parte (arquivos individuais) do dump, que são criadas por cada processador configurado através do parâmetro PARALLEL. Sem %u um único arquivo de dump é gerado e ao invés de ganhar desempenho, a exportação irá demorar mais. Veremos isso em detalhes adiante.
Exportando dados via Data Pump com paralelismo
Os testes que vou apresentar abaixo foram realizados com diversas configurações de paralelismo, para exportar via Data Pump, 2 GB de dados, em uma máquina que possui o equivalente a 8 processadores. Os testes em detalhes podem ser conferidos na Figura 1. Abaixo vou comentar apenas sobre o teste em que não usei paralelismo e sobre o teste que obteve o melhor desempenho:
Teste 1: Gerando dump sem paralelismo:
expdp system/senha schemas=TESTE directory=DP dumpfile=teste_1.dmp logfile=exp_teste_1.log
Tempo de execução : 3min34s
Teste 2: Gerando dump com 4 processadores (múltiplos arquivos):
expdp system/senha schemas=TESTE directory=DP PARALLEL=4 dumpfile=teste_4_%U.dmp logfile=exp_teste_4.log
Tempo de execução: 1min47s
Figura 1 – Testes de desempenho exportando dados via Data Pump
CONCLUSÃO
Ao utilizar múltiplos processadores (quando a máquina possui mais de um processador), conforme testes apresentados neste artigo, pudemos verificar que a gente pode otimizar o tempo de geração de dumps via Data Pump.
O melhor tempo obtido nos testes, em comparação ao teste em que não utilizei paralelismo, foi quando utilizei metade dos processadores disponíveis na máquina (4 processadores). Nesse teste consegui obter o mesmo resultado, em exatamente metade do tempo. Se você trabalha com BIG DATA e precisa reduzir o tempo de geração de seus dumps (que podem durar muitas horas), esta aí um valioso recurso: paralelismo no DATAPUMP!
Referências