Pular para o conteúdo

Parallel Query

Tem vezes que necessitamos fazer consultas ou atualizações em massa e não tem opção, vamos inevitavelmente fazer full em uma tabela muito grande.
Se já procuramos diversas opções e não encontramos nenhum outro recurso inteligente, podemos minimizar o impacto deste processamento dividindo seu trabalho entre as diversas CPUs do servidor.
Obviamente este processo não server para servidores monoprocessados, se tem um único servidor, não tem com quem compartilhar o trabalho…
No meu caso tenho servidores quad-core, já trabalhei com servidores AIX, HP, Solaris com múltiplos processadores, nestes casos a opção é bastante interessante…
Quando lançamos um processo ao sistema operacional, ele pega um processador e, caso o mesmo encontra-se disponível, temos até cem por cento de uso desse processador, em servidores multiprocessados, temos um processador em cem por cento e os demais inativos.
Usando o processamento paralelo, nós podemos utilizar todas as CPUs em um único processo, o que vai dar um ganho significativo no processo…

alter table t1 parallel (degree 12);

Aqui você define que a tabela t1 irá executar processos em modo paralelo abrindo doze processos, como tenho um RAC com 3 nós com processadores quad-core, estaria usando toda a capacidade dos servidores, é claro que isso não é muito recomendado, é bom sempre deixar alguns processadores para os outros processos…

select cod_cliente, count(*) from t1
where cod_cliente in (3098, 3653, 3185)
group by cod_cliente;

Esta consulta, que normalmente demoraria alguns minutos, por se tratar de uma tabela com milhões de registros, é executada em poucos segundos, pois estou usando o máximo de recursos dos meus servidores.

alter table giss.tb_boletos noparallel;

Não esquecer de “desmarcar” a tabela do modo paralelo…
Como a Oracle também gosta de facilitar a vida de seus usuários… Sim ela não gosta só de complicar, ela ajuda também… risos…

Select /*+ Parallel (t1, 12) */ cod_cliente, count(*) from t1
where cod_cliente in (3098, 3653, 3185)
group by cod_cliente;

Esta opção faz a mesma coisa…

Você também pode usar em opções de processos DML :

alter session enable parallel dml;
insert /*+ parallel (t1,4,1) */ into t1
select * from t2;
commit;
alter session disable parallel dml;

Como tudo nesta vida, esta opção tem que ser usada com equilíbrio, pois pode haver situações em que tentamos acertar uma ponta e destruimos outra…

Marcio68Almeida

Marcio68Almeida

Comentário(s) da Comunidade

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress