Grau de Paralelismo (DOP)

Fala ai rapaziada! Voltando a postar aqui, depois de ter ficado afastado com os estudos para o OCM 11g e que graças à Deus deu certo. Estou postando hoje sobre o grau de paralelismo também conhecido por DOP ou Degree Of Parallelism, configurado no banco de dados Oracle 11gR2.

A utilização de paralelismo é normalmente observada e recomendada em ambientes DW/DSS, existem vários parâmetros que controlam o comportamento de atividade paralela no banco, dentre eles abaixo listo os que julgo mais relevantes:

  • parallel_degree_policy: controla a política de paralelismo do banco. Se o valor for MANUAL será desabilitado o paralelismo automático, enfileiramento de queries para paralelismo e execução de paralelismo em memória (In-Memory Parallelism). O valor AUTO funciona como o oposto do valor MANUAL. E o valor LIMITED habilitada execução em paralela, porém desabilita enfileiramento e In-Memory Parallel Execution;
  • parallel_degree_limit: funciona somente se o valor acima estiver com AUTO e este parametro limita o grau de paralelismo por sessão. Este limite pode ser a quantidade de CPU da instância quando o valor é CPU. Quando valor é IO, será considerado a banda máximo de I/O por processo e necessita que as estatísticas de IO tenham sido coletadas previamente. Por fim, se o valor for um inteiro qualquer, será o DOP considerado pelo banco, ou seja, se o valor for 10, nenhuma sessão receberá mais de 10 processos em paralelismo;
  • parallel_adaptive_multi_user: possui valores TRUE or FALSE e controla a capacidade do Oracle em reduzir a quantidade de paralelismo para uma sessão levando em consideração a carga do ambiente e startup da base;
  • parallel_force_local: utilizada apenas em bancos RAC, aceita os valores TRUE or FALSE e determina se o processo em paralelo deve executar somente no servidor local, não propagando a execução em paralelo para os demais nós do clusters;
  • parallel_instance_group: utilizada apenas em bancos RAC, e restringe a utilização de paralelismo para um determinado grupo de instâncias. Exemplo, em um RAC de quatro nós, você pode criar um serviço em dois nós apenas e determinar que toda a atividade em paralelismo será executada somente naqueles dois nós;
  • parallel_max_servers: reflete a máxima quantidade de paralelismo que o Oracle pode utilizar para queries, DMLs e recuperação do banco. É calculado automaticamente pelo Oracle através da conta => PARALLEL_THREADS_PER_CPU * CPU_COUNT * DECODE(MEMORY_TARGET, 0, DECODE(SGA_TARGET, 0, DECODE(PGA_AGGREGATE_TARGET, 0, 1, 2), 4) ,4) * 5;
  • parallel_min_percent quando o valor da política de paralelismo não está automático, este parâmetro controla o enfileiramento de queries caso o percentual mínimo de processador seja alcançado, ou seja, se existem 10 processadores disponíveis e uma query solicita pra executar com 30 e este parâmetro está configurado com 50, o limite de 50% não será atingido e será retornado erro na sessão;
  • parallel_min_time_threshold: se a política estiver como AUTO, será considerado um tempo mínimo de execução de query em segundos para que o Optimizer considere executar em paralelismo. Exemplo, se uma query possui um plano com tempo estimado de execução em 30 segundos, o gerenciamento automático está habilitado e este parâmetro possui o valor 20, então o Optimizer irá considerar executar esta query com paralelismo;
  • parallel_servers_target: quantidade limite de paralelismo por instância, antes de iniciar enfileiramento. É calculado automaticamente pelo Oracle através da conta => PARALLEL_THREADS_PER_CPU * CPU_COUNT * DECODE(MEMORY_TARGET, 0, DECODE(SGA_TARGET, 0, DECODE(PGA_AGGREGATE_TARGET, 0, 1, 2), 4) ,4) * 2 . Atente que este valor deve ser inferior ao parallel_max_servers;
  • parallel_threads_per_cpu: configurado de acordo com a plataforma do banco e reflete a quantidade de threads por CPU;
  • recovery_parallelism: estipula a quantidade de paralelismo utilizado na instância quando esta inicia o instance recovery. Se os valores forem iguais a 0 e 1, será desabilitado paralelismo na recuperação da instância;

Eu sou a favor da política de paralelismo configurada como automática para os banco de dados em ambientes DWs. Para ambientes OLTPs, o auto DOP deve ser analisado com cautela. Bom é isso ai, por hoje é só pessoal!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s