Data

7 jan, 2014

Paralelismo no Oracle Datapump – #Melhores2013

Publicidade

O propósito deste artigo é demonstrar um conjunto de técnicas e boas práticas para obter melhores resultados ao utilizar a ferramenta de importação e exportação do Oracle, o Datapump, tal como o funcionamento do paralelismo nesse utilitário. Este artigo se aplica somente à versão Oracle Enterprise, visto que o recurso de paralelismo não está disponível nas demais versões.

Primeiro, deve-se entender como esse recurso de paralelismo funciona no Datapump, então, pode-se concluir se ele será útil ou não para uma determinada operação de movimentação de dados.

O parâmetro Parallel

O Datapump utiliza uma arquitetura multiprocessual na qual um único processo mestre (Master Control Process – MCP) atribui funções/trabalhos para os worker process, estes, quando ativos, irão carregar/descarregar um objeto. Esse mesmo processo poderá ainda coordenar os chamados Parallel Execution Processes (PX)[1].

O valor usado nesse parâmetro indica quantos processos PX  e workers ativos podem ser usados ao mesmo tempo para carregar/descarregar dados, porém, o fato é que nem sempre um worker process irá usar os processos PX para carregar/descarregar um objeto, e isso é que irá influenciar na melhoria desse procedimento.

O Oracle usa uma métrica para decidir se irá usar ou não processos PX. Primeiro, ele busca o tamanho estimado da tabela sem contar os metadados. Num segundo passo, divide esse número por 250MB; caso o resultado seja maior que 1, poderá ser usado em processos PX se e somente se a estrutura da tabela/partição permitir. Caso a tabela ou partição permita, o número obtido será a quantidade de PX que poderá ser alocada.

datapump

Figura 1 – Operação de export em uma tabela

Nesse exemplo hipotético de export, pode-se fazer as seguintes observações. Primeiro, como dito, o grau de paralelismo calculado só será alcançado caso o parâmetro especificado seja igual ou superior. Segundo, quando usa-se processos PX, o worker process responsável pela coordenação não é contado no grau de paralelismo.

Métodos de acesso

A primeira medida tomada pelo worker process ao receber uma tarefa de import/export é definir qual será o método de acesso usado. Entre eles, dois são os mais utilizados: External tables e Direct Path.

O método mais ágil dentre os dois é o Direct Path, mas esse método possui algumas inflexibilidades, sendo descartado quando uma delas é encontrada no objeto a ser carregado/decarregado. Entre essas limitações, as principais estão na seguinte listagem[2]:

  • Colunas encriptadas;
  • Tabelas com active triggers (Import);
  • Colunas BFILE;
  • Impossibilidade de usar os parâmetros QUERY,SAMPLE ou REMAP_DATA;
  • Não consegue usar processos PX.

O método External table sempre é escolhido quando uma tabela ou partição possui mais de 250MB ou quando sua estrutura impossibilita o uso do Direct Path.

Observações úteis

  • No método de import, um worker de dados só é executado a partir do momento em que finda-se o trabalho do worker de metadados, que por sua vez também começa a carregar dados;
  • Datapump nunca irá paralelizar metadados, exceto em operações de import caso o objeto em questão seja um índice ou um package body;
  • Em operações de export, um worker ou PX necessita de acesso exclusivo ao dumpfile, logo deve-se usar um wildcard[3] no parâmetro, caso contrário, apenas um processo estará apto a gravar as informações coletadas.

Boas práticas

  • Mantenha o dumpfile em um disco diferente do de datafiles da tablespace destino, assim o Oracle irá ler num disco e gravar noutro, aumentando a performance;
  • Na primeira execução, use o dobro do número de CPU’s como valor do parâmetro PARALLEL; a partir daí, mensure o valor de acordo com as experiências obtidas.

Conclusão

O aproveitamento do paralelismo no datapump está diretamente relacionado à quantidade de dados das tabelas, logo só será proveitoso quando houver tabelas com alto volume de dados.

 

Referências


[1] Para entender melhor o funcionamento destes processos, recomendado a leitura deste artigo

[2] A lista completa pode ser encontrada no My Oracle Support através do Article ID : 552424.1

[3] Exemplo: dumpfile=datapump_%U.dmp