quarta-feira, 10 de outubro de 2018

ODC Appreciation Day : "Herança" de parâmetros nas sessões que abrem processos em paralelo



Olá pessoal,

Aproveitei o ODC DAY 2018 para escrever sobre algo que muitos já devem ter se perguntado.

Imaginem a alteração de um parâmetro no nivel da sessão (alter session) e posteriormente essa sessão dispare um processo que irá utiliza paralelismo. 

Será que as novas sessões criadas no banco devido ao degree do paralelismo irão "herdar" os valores dos parâmetros alterados na minha sessão?

Vamos a um exemplo, irei alterar alguns parâmetros e criar uma tabela nova com parallel 64:


Consultando os parâmetros default do banco de dados, podemos verificar que os valores são bem menores do que os valores que eu seto no script:

Após disparar o script, vamos procurar o SID desta sessão:



Conferindo o SQL:


Verificando as sessões criadas no banco devido ao paralelismo utilizado:



Ao conferir os parâmetros da sessão principal, podemos ver que eles foram alterados:

Conferindo os parâmetros de uma das sessões que foram criadas devido ao paralelismo, podemos verificar que os parâmetros também foram alterados:





terça-feira, 9 de outubro de 2018

Exadata + HCC = Performance + High Compression

Olá pessoal,

Nos últimos dias estive envolvido em um projeto de tuning de um ambiente DW que roda em um Exadata.

Foi um desafio gigante, pois não tinhamos acesso ao ambiente e nem aos dados do cliente.
Apenas recebemos 237 SQLs e precisávamos ajustar a performance dos mesmos.

A ideia inicial foi gerar as tabelas em nosso laboratório para poder testar os SQLs.
Para gerar os dados, utilizei uma rotina que foi criada pelo Eduardo Claro e pelo Rodrigo Righetti  **Preciso convencer eles a criarem um post sobre a mesma :)

Essa rotina gera dados fictícios baseados nas estatísticas das tabelas, emulando uma distribuição bem parecida dos dados das tabelas reais.

O cliente aceitou enviar as estatísticas das tabelas do ambiente de testes e com isso consegui montar o ambiente e iniciar os testes.


Algumas coisas que observei e gostaria de compartilhar:

1 - A compressão utilizando HCC é realmente impressionante, de 1.7TB para apenas 44GB.
Obviamente que tudo isso pode variar de ambiente para ambiente, pois depende da distribuição dos dados na tabela.





2 - O tempo das queries diminuiu drasticamente utilizando o HCC, em média 10x mais rápido.

3 - O Exadata utiliza Storage Indexes em tabelas com HCC. Eu não havia encontrado nenhuma informação na documentação oficial sobre isso, apenas encontrei uma mensão no livro "Expert Oracle Exadata":





Tempo da Query utilizando Compression Basic:

37 segundos



Tempo da Query utilizando Compression HCC:

3,6 segundos



E como podemos observar, Storage Indexes foram utilizados na tabela com HCC:


Apesar dos Storage Indexes funcionarem, sua eficiência tem um peso menor, afinal os ganhos com compressao são os que realmente deram um grande aumento de performance.