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:

  • Nome do usuário que será criado (informe PERFSTAT)
  • Senha do referido usuário: informe uma senha a seu critério
  • Tablespace para o usuário perfstat: informe a tablespace PERFSTAT
  • Tablespace temporária: informe a tablespace temporária da sua instância

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;
/
 
7 – Para monitorar o JOB que fora criado, você pode executar o select abaixo.
 
SELECT owner, job_name, enabled, state, job_action, next_run_date, run_count, failure_count
FROM dba_scheduler_jobs
WHERE owner = 'PERFSTAT';
 
8 – Como última etapa, para garantirmos que tudo está OK, execute o select abaixo e veja se existem registros na view STATS$SNAPSHOT. Caso haja registros nesta view significa que os snapshots estão sendo coletados normalmente, por enquanto essa informação é suficiente e no próximo post vamos entender em detalhes o que essas informações querem dizer.
 
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;
 
Se você chegou até aqui, seu Statspack está pronto. No próximo post vamos mostrar como gerar o relarório do Statspack e também como explorar algumas das views que ele disponibiliza para coletarmos dados de performace do banco de dados.
 
Forte abraço e até próxima!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *