O Statspack é um processo do Oracle database que tem a capacidade de coletar e armazenar as informações referente a performance da instância de banco de dados seja ela single ou RAC. Você pode usar o Statspack como uma alternativa ao relatório Automatic Workload Repository, mais conhecido como AWR (que é uma option do Oracle e precisa ser licenciado à parte no Oracle Diagnostic Pack).
Diferentemente do AWR que já vem instalado e 100% funcional, o Statspack precisa ser configurado manualmente para que funcione de forma correta. Esta etapa é muito simples, basta executar um script sql que fica na $ORACLE_HOME/rdbms/admin. Nesta pasta existem vários scripts sql que são usados na administração da instância, destes scripts todos aqueles que começarem com spXXXX.sql são scripts inerentes ao Statspack, neste post vamos falar apenas da instação do Statspack, nos demais posts vamos explicar como utilizar as principais funcionalidades.
Veja na tabela abaixo os principais scripts que estamos falando e suas respectivas funcionalidades:
Função | Exemplo no SQL*Plus | Executar com o usuário |
Instalação do Statspack | SQL> @spcreate.sql |
SYSDBA |
Cria um job para coleta dos snapshots | SQL> @spauto.sql |
Usuário com Role de DBA |
Gerar o relatório do Statspack | SQL> @spreport.sql |
Usuário com Role de DBA |
Elimina os snapashots antigos | SQL> @sppurge.sql |
Usuário com Role de DBA |
Trunca as tabelas dos snapshots | SQL> @sptrunc.sql |
PERFSTAT |
Desinstala o Statspack | SQL> @spdrop.sql |
Usuário com Role de DBA |
Para configurar o Statspack siga as instruções a seguir:
1 – Crie uma tablespace chamada PERFSTAT:
SQL> create tablespace PERFSTAT datafile '+DATA/xxxx/perfstat_01.dbf' size 1G;
2 – Se estiver utilizando arquitetura multitenant execute o script abaixo. Caso contrário, vá direto para o passo 3.
SQL> alter session set "_oracle_script"=true;
3 – Execute o script para criação dos objetos do Statspack:
SQ> @?/rdbms/admin/spcreate.sql
Nota: Este script vai te pedir algumas informações como:
4 – Colete as estátisticas do usuário statspack (opcional, porém recomendável):
SQL> exec dbms_stats.gather_schema_stats('PERFSTAT');
5 – A patir de agora, você já pode se conectar no banco de dados com o usuário statspack e executar a primeira coleta de snapshots:
SQL> conn perfstat/passwd
SQL> exec statspack.snap;
6 – A coleta das informações através dos snapshots deve ser feita de maneira automática, então o que você pode fazer é criar um job para que a coleta seja executa em um intervalo regular, para isso podemos usar a DBMS_SCHEDULER. No exemplo abaixo vamos criar um job para fazer a coleta a cada 20 minutos:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'coleta_snapshot',
job_type => 'STORED_PROCEDURE',
job_action => 'perfstat.statspack.snap',
start_date => '25-JAN-22 07.00.00 AM America/Sao_Paulo',
repeat_interval => 'FREQ=MINUTELY;INTERVAL=20',
comments => 'Coleta de snapshots Statspack');
END;
/
SELECT owner, job_name, enabled, state, job_action, next_run_date, run_count, failure_count
FROM dba_scheduler_jobs
WHERE owner = 'PERFSTAT';
SELECT snap_id,to_char(snap_time, 'dd/mm/rr hh24:mi') snap_time,snapshot_exec_time_s
FROM perfstat.stats$snapshot
ORDER BY
1;