Instalação do Oracle Statspack

No último artigo vimos uma introdução sobre o AWR e neste vamos conhecer um pouco sobre o Statspack.

O Oracle Statspack é similar ao AWR, ele realiza snapshots de informações estatísticas de desempenho a cada hora cheia e armazena isso nos objetos do schema PERFSTAT. O Statspack foi introduzido na versão 8.1.6 do Oracle Database e hoje só utilizamos quando não temos o licenciamento necessário para usar os recursos do AWR. Então se você administra ambientes Standard Edition esqueça os relatórios, views e gráficos do AWR e ASH e acostume-se a usar o Statspack.

statspack tables

Fonte: http://www.akadia.com/img/ora_statspack_tables.gif

Por padrão o Statspack não vem instalado, então precisamos primeiro instalá-lo e configurá-lo para executar os snapshots. A documentação detalhada do utilitário você encontra em $ORACLE_HOME/rdbms/admin/spdoc.txt ou também tem esta documentação não oficial: SP Survival Guide. O procedimento que apresento aqui funciona desde o Oracle 8i até o 12c (preste atenção no detalhe* quando estiver criando o SP no CDB).

Antes de instalar o Statspack eu gosto sempre de criar uma tablespace exclusiva para ele:

SQL> create tablespace PERFSTAT datafile '+DATA' size 50M autoextend on next 50M maxsize 5G;

Tablespace created.

*Se você, assim como eu, estiver rodando o script de criação da estrutura do Statspack no CDB de um Oracle Database 12c altere o parâmetro “_oracle_script” para TRUE na sua sessão para não ter o erro apresentado referente ao nome do usuário comum PERFSTAT.

... Creating PERFSTAT user
create user perfstat
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

Com o usuário SYS rode os seguintes scripts:

SQL> alter session set "_oracle_script"=true;

Session altered.
SQL> @?/rdbms/admin/spcreate.sql

Choose the PERFSTAT user's password
-----------------------------------
Not specifying a password will result in the installation FAILING

Enter value for perfstat_password: oracle
oracle


Choose the Default tablespace for the PERFSTAT user
---------------------------------------------------
Below is the list of online tablespaces in this database which can
store user data.  Specifying the SYSTEM tablespace for the user's
default tablespace will result in the installation FAILING, as
using SYSTEM for performance data is not supported.

Choose the PERFSTAT users's default tablespace.  This is the tablespace
in which the STATSPACK tables and indexes will be created.

TABLESPACE_NAME 	       CONTENTS  STATSPACK DEFAULT TABLESPACE
------------------------------ --------- ----------------------------
PERFSTAT		       PERMANENT
SYSAUX			       PERMANENT *
USERS			       PERMANENT

Pressing <return> will result in STATSPACK's recommended default
tablespace (identified by *) being used.

Enter value for default_tablespace: PERFSTAT

Using tablespace PERFSTAT as PERFSTAT default tablespace.


Choose the Temporary tablespace for the PERFSTAT user
-----------------------------------------------------
Below is the list of online tablespaces in this database which can
store temporary data (e.g. for sort workareas).  Specifying the SYSTEM
tablespace for the user's temporary tablespace will result in the
installation FAILING, as using SYSTEM for workareas is not supported.

Choose the PERFSTAT user's Temporary tablespace.

TABLESPACE_NAME 	       CONTENTS  DB DEFAULT TEMP TABLESPACE
------------------------------ --------- --------------------------
TEMP			       TEMPORARY *

Pressing <return> will result in the database's default Temporary
tablespace (identified by *) being used.

Enter value for temporary_tablespace:

Using tablespace TEMP as PERFSTAT temporary tablespace.


... Creating PERFSTAT user


... Installing required packages


... Creating views


... Granting privileges

NOTE:
SPCUSR complete. Please check spcusr.lis for any errors.
.
.
. Muitas linhas serão criadas, então resumi um pouco o resultado...
.
.

1 row created.


Commit complete.


Synonym created.


Synonym created.


NOTE:
SPCTAB complete. Please check spctab.lis for any errors.

SQL> --  Create the statistics Package
.
.
.
.
Creating Package STATSPACK...

Package created.

No errors.
Creating Package Body STATSPACK...

Package body created.

No errors.

NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.

Certifique-se de que não houve nenhum erro no processo acessando os arquivos spcpkg.lis, spctab.lis e spcusr.lis.

Depois de estar com o Statspack instalado recomendo que você colete estatísticas do schema PERFSTAT, pois senão você poderá ter problemas na execução de algumas packages que consultam/gravam em tabelas do SP:

SQL> exec dbms_stats.gather_schema_stats('PERFSTAT');

PL/SQL procedure successfully completed.

Conecte-se com o usuário PERFSTAT e gere um snapshot inicial:

[oracle@loredata-srv ~]$ sqlplus perfstat/oracle

SQL*Plus: Release 12.1.0.2.0 Production on Wed Jul 20 13:00:29 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics,
Real Application Testing and Unified Auditing options

SQL> exec statspack.snap;

PL/SQL procedure successfully completed.

Em seguida crie o job de coleta automática:

SQL> @?/rdbms/admin/spauto.sql

PL/SQL procedure successfully completed.


Job number for automated statistics collection for this instance
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Note that this job number is needed when modifying or removing
the job:

     JOBNO
----------
	 1


Job queue process
~~~~~~~~~~~~~~~~~
Below is the current setting of the job_queue_processes init.ora
parameter - the value for this parameter must be greater
than 0 to use automatic statistics gathering:

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes		     integer	 1000


Next scheduled run
~~~~~~~~~~~~~~~~~~
The next scheduled run for this job is:

       JOB NEXT_DATE NEXT_SEC
---------- --------- --------
	 1 20-JUL-16 14:00:00

Verifique que o job foi realmente agendado:

SQL> alter session set nls_date_format='dd/mm/yyyy hh24:mi:ss';

Session altered.

SQL> select job, what, LAST_DATE, NEXT_DATE, TOTAL_TIME, BROKEN, FAILURES from dba_jobs where SCHEMA_USER='PERFSTAT';

       JOB WHAT 					      LAST_DATE 	  NEXT_DATE	      TOTAL_TIME B   FAILURES
---------- -------------------------------------------------- ------------------- ------------------- ---------- - ----------
	 1 statspack.snap;							  20/07/2016 14:00:00	       0 N

Diferentemente do relatório do AWR o relatório do Statspack tem informações menos detalhadas, mas é melhor do que nada, certo? O relatório gerado pelo Statspack também só é extraído em formato .txt, mas é fácil de ler.

Vou executar mais um snapshot para ter os 2 necessários para gerar um relatório:

SQL> exec statspack.snap;

PL/SQL procedure successfully completed.

Podemos consultar os snapshots na view stats$snapshot:

SQL>  select name, snap_id, to_char(snap_time, 'DD/MM/YYYY HH24:MI:SS') "Snapshot Time" from stats$snapshot,v$database;

NAME	     SNAP_ID Snapshot Time
--------- ---------- -------------------
LOREDB		   2 20/07/2016 13:44:18
LOREDB		   1 20/07/2016 13:01:16

Para gerar o relatório execute o script:

SQL> @?/rdbms/admin/spreport.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name	 Inst Num Instance
----------- ------------ -------- ------------
 1937271711 LOREDB		1 loredb



Instances in this Statspack schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id    Inst Num DB Name	  Instance     Host
----------- -------- ------------ ------------ ------------
 1937271711	   1 LOREDB	  loredb       loredata-srv
					       .localdomain

Using 1937271711 for database Id
Using	       1 for instance number


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing <return> without
specifying a number lists all completed snapshots.



Listing all Completed Snapshots

						       Snap
Instance     DB Name	    Snap Id   Snap Started    Level Comment
------------ ------------ --------- ----------------- ----- --------------------
loredb	     LOREDB		  1 20 Jul 2016 13:01	  5
				  2 20 Jul 2016 13:44	  5



Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 1
Begin Snapshot Id specified: 1

Enter value for end_snap: 2
End   Snapshot Id specified: 2



Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_1_2.  To use this name,
press <return> to continue, otherwise enter an alternative.

Enter value for report_name: statspack_rpt.txt

Using the report name statspack_rpt.txt

STATSPACK report for

--RESULTADO DO RELATORIO........
.
.
.
End of Report ( statspack_rpt.txt )

O arquivo gerado pode ser aberto com qualquer editor de texto.

Por hoje é só galera. Espero que este artigo ajude de alguma maneira no dia-a-dia de vocês.
Em breve vou escrever um artigo sobre como fazer manutenção no Statspack para remover snapshots, criar jobs automáticos para remoção e como remover o Statspack por completo.

Abraços e até mais,

Franky