Algumas vezes nos deparamos com o seguinte tipo de problema em nosso trabalho:
“Vou fazer uma alteração no servidor de banco de dados. Qual será o impacto? Vai melhorar ou vai piorar? E quanto?”
Se você também se deparou com esta situação, o Oracle 11g oferece um ótimo recurso que pode te reportar a diferença do “antes e depois” da alteração. Seja ela uma alteração simples, como a criação de um índice em uma tabela ou uma nova coleta de estatísticas; até grandes alterações como upgrades do SGBD, do sistema operacional, ou até mesmo do hardware do servidor.
Conheçam o SQL Performance Analyzer. Com ele você pode ter métricas exatas da diferença de performance depois que a alteração desejada seja efetuada. Vou mostrar isto na prática, usando como base um exemplo que peguei no site Oracle-Base.
Primeiro, conecte-se à sua base de dados, com um usuário que tenha grants CONNECT e CREATE TABLE.
Criei uma tabela acima, com uma quantidade razoável de registros, para usá-la no nossos testes. Com a tabela recém-criada, vamos fazer uma coleta de estatísticas:
Procedimento PL/SQL concluÝdo com sucesso.
Agora vamos rodar alguns select’s – que serão os select’s comparados no “antes e depois”. Em um sistema do “mundo real”, troque pelos select’s mais críticos do seu sistema, ou seja, aqueles que você pretende fazer a comparação.
Ok, já criamos uma tabela com uma boa quantidade de dados, coletamos estatísticas da tabela e rodamos alguns select’s sobre essa tabela. Reparem que todos os select’s usaram a coluna object_id na cláusula WHERE. Esta coluna não tem índice, e é exatamente essa a alteração que faremos. Vamos criar um índice nesta coluna e depois comparar a performance destes select’s sem índice e com índice.
Agora vamos conectar como SYS em um outro terminal, para criar um “SQL Tuning Set”:
Em seguida, a função SELECT_CURSOR_CACHE é usado para recuperar um cursor que contém todas as instruções SQL que foram analisados pelo esquema MILTON e que contém a palavra “objetos”. O cursor resultante é carregado para o SQLSET utilizando o procedimento LOAD_SQLSET.
Agora sim vamos efetivamente usar o pacote do Performance Analyzer, o DBMS_SQLPA. Primeiro, criar uma “analysis task”:
Novamente como usuário SYS, capturo a análise de performance da nova situação, ou seja, após a crianção do índice:
Executar a comparação de performance:
E finalmente, vamos gerar uma página HTML contendo o relatório. Algo lindo pra mostrar pro seu gerente, é uma evidência quantitativa de melhoria de performance!
Feito! Agora é só abrir o arquivo “D:Worktestessql_perf_analyzer.htm” no seu browser e analisar as informações.
Excelente texto sobre uma excelente ferramenta, pouco conhecida embora tenha sido o carro chefe do 11gR1.
Parabéns!
Mas é muita honra ganhar um comentário deste de alguém deste calibre! Um dos meus ídolos do mundo Oracle!
Muito obrigado Portilho, abraço!
Milton vai devagar na postagem dos artigos… Não estou tendo tempo pra ler todos… hihihi…
Seu blog está de parabéns !
Eu já conhecia o pacote DBMS_SQLTUNE e até fazer o SQLSET, mas o pacote DBMS_SQLPA é novidade pra mim… Aprendi mais uma…
Att,
Sakamoto
MyTraceLog – Registro de um DBA
http://mytracelog.blogpost.com
Milton,
bem interessante esse post, como o Portilho comentou é muito 10, vou voltar aqui para usar como base nos meus testes. Estou me virando ainda para troca de computador, mas parabéns é muito 10 essa ferramenta, o Portilho tinha comentado dela em um treinamento na Nerv.
abraços
capin