Uma das maiores dificuldades de quem trabalha com banco de dados Oracle Standard Edition One ou Standard Edition é a geração de relatórios de performance, pois todas as features de performance são disponibilizadas somente para a versão Enterprise Edition. Gostaria de compartilhar uma forma fácil e rápida de configurar o relatório de performance através do pacote STATSPACK. Nesse artigo iremos realizar as seguintes atividades:
- Instalação do pacote STATSPACK
- Coleta manual de estatísticas
- Coleta automática de estatísticas
- Gerando relatório
- Instalação do pacote STATSPACK
Uma vez instalado o utilitário STATSPACK, é criado o usuário perfstat, o qual é dono de todos os códigos PL/SQL e os objetos de banco de dados criados.
Em banco de dados com CDB/PDBs, se faz necessário habilitar opção _oracle_script, pois não é possível criar common user no CDB.
Instalação do pacote STATSPACK
/* Ambiente com CDB*/
alter session set "_oracle_script"=true;
/* CRIAR TABLESPACE */
create tablespace tools datafile size 200m autoextend on next 100m;
/* Conecte usando “sys/manager as sysdba” para instalar o STATSPACK usando o script spcreate.sql localizado no diretório $ORACLE_HOME/rdbms/admin. Use as configurações acima quando solicitado pelo programa. */
@?/rdbms/admin/spcreate
Quando executarmos o script spcreate, precisaremos responder 3 perguntas:
- Enter value for perfstat_password: [senha do usuário perfstat]
- Enter value for default_tablespace: TOOLS
- Enter value for temporary_tablespace: TEMP
Se aparecerem as mensagens abaixo, quer dizer que o pacote foi instalado com sucesso!
Package created.
No errors.
Creating Package Body STATSPACK...
Package body created.
No errors.
NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.
Usuário Statspack
Apos a instalação do pacote, todas as atividades serão realizadas com o usuário perfstat.
sqlplus perfstat
Coleta manual de estatísticas
execute statspack.snap;
Coleta automática de estatísticas
O script spauto.sql faz uso do pacote DBMS_JOB, a forma automatizada para coleta de estatísticas. O script fornecido pela Oracle programa fotografias de hora em hora. Esse processo pode ser alterado para se adequar a um determinado sistema.
@?/rdbms/admin/spauto
Consultando os relatórios gerados.
Após a espera de algumas horas consulte a view stats$snapshot para listar quais snapshots foram coletados.
select name,snap_id,to_char(snap_time,'DD.MM.YYYY:HH24:MI:SS')
"Date/Time" from stats$snapshot,v$database
order by 1, 2;
Gerando relatório
Para examinar as mudanças nas estatísticas entre dois períodos de tempo, execute o arquivo spreport.sql enquanto conectado com o usuário perfstat.
@?/rdbms/admin/spreport
Adicional
Criando job para coletar relatórios a cada 15 minutos.
BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'PERFSTAT.statspack_snap_15min',
repeat_interval => 'FREQ=MINUTELY;BYMINUTE=00,15,30,45' );
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'PERFSTAT.sp_snapshot',
job_type => 'STORED_PROCEDURE',
job_action => 'PERFSTAT.statspack.snap',
schedule_name => 'PERFSTAT.statspack_snap_15min',
auto_drop => FALSE,
comments => 'Statspack collection' );
DBMS_SCHEDULER.ENABLE('perfstat.sp_snapshot');
END;
/
Criando Job para deletar statspack apos 30d
BEGIN DBMS_SCHEDULER.CREATE_JOB (
job_name => '"PERFSTAT"."JOB_CLEAN_SNAPSHOTS"',
job_type => 'PLSQL_BLOCK',
job_action => 'delete from perfstat.stats$snapshot where snap_time; (sysdate - 30);',
number_of_arguments => 0,
start_date => NULL,
repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT;BYHOUR=23;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => 'Eliminacao de snapshots antigos do STASPACK.');
DBMS_SCHEDULER.enable( name => '"PERFSTAT"."JOB_CLEAN_SNAPSHOTS"');
END;
/
Abs!!!!!