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.