Arquivo da categoria: Tuning

Configurando Schedule e Gerando Relatórios com o STATSPACK

No último post eu mostrei como instalar e configurar o STATSPACK, neste post mostrarei como configurar uma coleta automática de dados para o STATSPACK.

Statspack não é um processo automático. Ele requer configuração manual, um DBA precisa configurar um scheduler para Statspack Collection e Statspack purge.

Podemos automatizar a tomada de snapshots do STATSPACK executando DBMS_JOB ou programando-o através do crontab. No exemplo que usaremos mostraremos a configuração do scheduler para o STATSPACK  via DBMS_JOB.

Cabe ao DBA, descobrir quantas vezes precisa estar executando o STATSPACK. Como os dados devem ser coletados e escritos em algum lugar, certifique-se de que você não está coletando dados com muita freqüência, a coleta de dados em excesso pode tornar o servidor de banco de dados mais lento.

Abaixo mostraremos como configurar uma coleta  automática para o STATSPACK.

Depois do STATSPACK  instalado e funcionando, podemos agendar a coleta automática de dados. O script spauto.sql pode ser usado para agendar coletas de snapshots do sistema a cada hora.

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

OBS: De acordo com a necessidade do ambiente é possível alterar o intervalo de execução deste job.

Para uma coleta manual usamos o comando abaixo, conectados com o usuário perfstat.

SQL> EXEC STATSPACK.snap

 PL/SQL procedure successfully completed.

SQL>

 1 – Gerando Relatórios

Após mais de um snapshot coletado, estarei gerando um relatório com a análise do ambiente. Assim como no AWR, para gerar o relatório do STATSPACK, devemos selecionar um snapshot inicial e um snapshot final e posteriormente definimos o nome do arquivo a ser gerado, que pode ser precedido pelo local de destino.

Segue abaixo a sintaxe da execução do relatório de coleta  STATSPACK.

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

Segue abaixo um modelo do relatório STATSPACK (como o relatório é extenso somente coloquei a parte inicial).

STATSPACK report for

Database    DB Id    Instance     Inst Num  Startup Time   Release     RAC

~~~~~~~~ ———– ———— ——– ————— ———– —

           196335337  orcl               1 20-Apr-17 12:52 11.2.0.1.0  NO

Host Name             Platform                CPUs Cores Sockets   Memory (G)

~~~~ —————- ———————- —– —– ——- ———

     localhost.locald Linux x86 64-bit           2     2       1     2.0

Snapshot       Snap Id     Snap Time      Sessions Curs/Sess Comment

~~~~~~~~    ———- —————— ——– ——— ———–

Begin Snap:          3 20-Apr-17 16:00:03       40       5.1

  End Snap:          4 20-Apr-17 17:00:05       40       5.1

   Elapsed:      60.03 (mins) Av Act Sess:       0.4

   DB time:      25.94 (mins)      DB CPU:      13.92 (mins)

Cache Sizes            Begin        End

~~~~~~~~~~~       ———- ———-

    Buffer Cache:       188M              Std Block Size:         8K

     Shared Pool:       288M                  Log Buffer:     2,160K

Load Profile              Per Second    Per Transaction    Per Exec    Per Call

~~~~~~~~~~~~      ——————  —————– ———-  ——

      DB time(s):                0.4                0.0        0.01   0.06

       DB CPU(s):                0.2                0.0        0.00   0.03

       Redo size:           20,766.2            2,092.1

   Logical reads:              548.5               55.3

   Block changes:              138.3               13.9

  Physical reads:               22.9                2.3

Physical writes:               16.5                1.7

      User calls:                7.0                0.7

          Parses:                9.2                0.9

     Hard parses:                0.0                0.0

W/A MB processed:                1.8                0.2

          Logons:                0.1                0.0

        Executes:               62.6                6.3

       Rollbacks:                0.0                0.0

    Transactions:                9.9

2 – Purgar/remover dados desnecessários

É possível limpar dados desnecessários do esquema PERFSTAT usando sppurge.sql. Este script exclui snapshots que estão entre o intervalo inicial e final do Snapshot Id especificado. Segue abaixo a sintaxe de execução:

@?/rdbms/admin/sppurge.sql

OBS: O script acima executa uma remoção manual dos snapshots coletados, esse procedimento pode ser feito de forma automática pelo DBA.

3 – Desinstalando o STATSPACK

Para remover o statspack, basta executar o comando spdrop.sql.

@?/rdbms/admin/spdrop.sql

Referências:

Documentação Oracle

Oracle FAQ

AKADIA

Criando um repositório com statspack

Com a adição da feature Active  Workload Repository  (AWR) e Active Session History (ASH) no Oracle Database 10g e versões posteriores, pode parecer um pouco estranho ainda estar falando em Statspack. Ambas as funcionalidades requerem uma licença de  Diagnostics Pack, que se limita ao banco de dados Enterprise Edition.

Por que usar statspack quando existe o AWR? O statspack é free, e também fácil de implementar. Você pode usá-lo sem ter o Grid Control instalado. Mesmo com o Grid Control instalado no ambiente, ainda existem bancos de dados na versão 9i para uma aplicação específica, e a migração (ainda) não é possível. Então para o monitoramento de desempenho do banco de dados e recursos históricos você tem que implementar o Statspack. O Statspack também está disponível nas versões do Oracle 10g, 11g e 12c.

Podemos, então, usar essas informações para análise de desempenho, este artigo irá detalhar a configuração interativa de Statspack.

Passos para criação do repositório

1- Criar uma tablespace para o repositório

Neste exemplo chamarei a tablespace de statspack

SQL> create tablespace statspack datafile ‘/home/oracle/app/oracle/oradata/orcl/statspack.dbf’ size 100m autoextend on next 100m maxsize 2G;

Tablespace created.

2 – Executar a procedure spcreate  para  criar o repositório 

Executar a procedure spcreate e inserir as informações solicitadas.

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: perfstat

perfstat

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, asusing 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

—————————— ——— —————————-

STATSPACK                      PERMANENT

SYSAUX                         PERMANENT *

USERS                          PERMANENT

Pressing  will result in STATSPACK’s recommended default

tablespace (identified by *) being used.

Enter value for default_tablespace: STATSPACK

Using tablespace STATSPACK as PERFSTAT default tablespace.

Choose the Temporary tablespace for the PERFSTAT user

—————————————————–

Below is the list of online tablespaces in this database which canstore temporary data (e.g. for sort workareas).  Specifying the SYSTEMtablespace for the user’s temporary tablespace will result in theinstallation 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  will result in the database’s default Temporary

tablespace (identified by *) being used.

Enter value for temporary_tablespace: TEMP

Após entrar com as informações solicitadas aguardar a criação do repositório.

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.

No próximo post estarei mostrando a criação de um schedule   de trabalho para automatizar o processo de coleta instantânea do banco de dados com o statspack.

Um abraço a todos!!!

 

Como Rastrear uma Sessão usando SQL_TRACE

O rastreamento de sessões podem ser feito de várias maneiras em um banco de dados Oracle.
Um dos métodos mais populares é através do parâmetro sql_trace a nível de sessão.

SINTAXE:
alter session set events ‘sql_trace level <trace_level>’

ONDE:
<trace_level>  define o nível de rastreamento de uma instrução SQL que pode ser realizada;

Exemplo:

Todos os exemplos abaixo, foram efetuados em sessões conectadas a um banco de dados single-instance utilizando uma conexão dedicada.

1. Habilitando o rastreamento a nível de sessão

SQL> alter session set events ‘sql_trace level 4’;
Session altered.

2. Executar instrução sql
SQL> select 1 from dual;

1
———-
1
SQL>

3. Desligue o rastreamento em nível de sessão

SQL> alter session set events ‘sql_trace off’;
Session altered.

4. Rastreamentos gerados são armazenados no diretório

<diagnostic_dest>\rdbms\<database name>\<instance name>\trace

onde:

4.1 – <diagnostic_dest> é o  parâmetro de inicialização  DIAGNOSTIC_DEST do banco de dados aonde está definido o  diretório de diagnóstico.
Para descobrir a localização de parâmetro DIAGNOSTIC_DEST podemos executar a query abaixo:

SQL> select name, value from v$parameter where name like ‘diagnostic_dest’;   

NAME                      VALUE
————————- ———————————–
diagnostic_dest           /u01/app/oracle

4.2 – <database_name> – nome do banco de dados

SQL> select name from v$database;

NAME
————————-
ORCL

Então,os arquivos traces serão gerados no diretório:

/u01/app/oracle/diag/rdbms/orcl/orcl/trace

OBS: O valor em negrito acima, está relacionado com o servidor de banco de dados  que estou usando para fazer os testes.  Dependendo do local de instalação e do sistema operacional (windows, Linux, etc)  do binário do Oracle esse valor  será diferente do valor que esta em negrito acima.

Normalmente, com o banco de dados em atividade, são gerados vários arquivos traces nesse diretório e, para identificar o arquivo trace que geramos devemos descobrir o processo de servidor dedicado da sessão rastreada.
Lembre-se,  a consulta deve ser feita na mesma sessão em que o trace esta sendo efetuado.

SQL> select spid from v$process
where addr in (select paddr from v$session
               where sid=sys_context(‘USERENV’, ‘SID’));

SPID
————
5347

Nome do arquivo de rastreamento é gerado como:

<instance_name>_ora_<process_id>.trc

onde:

<instance_name> – nome de instância
<process_id>    – id do processo de servidor dedicado para sessão

então o nome do arquivo é:

orcl_ora_5347.trc

Verificando localmente no servidor oracle (neste caso o servidor  é o servidor aonde fiz os testes)

-rw-r—– 1 oracle oinstall 269077 Jun 22 06:13 alert_orcl.log
-rw-r—– 1 oracle oinstall     68 Jun 22 07:00 orcl_j000_6610.trm
-rw-r—– 1 oracle oinstall    968 Jun 22 07:00 orcl_j000_6610.trc
-rw-r—– 1 oracle oinstall    133 Jun 22 08:35 orcl_ora_5347.trm
-rw-r—– 1 oracle oinstall   4624 Jun 22 08:36 orcl_ora_5347.trc

Se executarmos novamente o rastreamento, é preciso lembrar que cada interação irá substituir o conteúdo do arquivo trace.

Para evitar isso, você pode usar o parâmetro tracefile_identifier.
Este parâmetro adicionará a variável do parâmetro tracefile_identifier ao nome do arquivo.

Outros parâmetros que podem ser usados durante o trace:

TIMED_STATISTICS – Especifica se as estatísticas relacionadas ao tempo são coletados ou não. Este parâmetro é verdadeiro quando o parâmetro de inicialização statistic_level está definido como TYPICAL ou ALL
STATISTICS_LEVEL – Especifica o nível de coleta de estatísticas do banco de dados e do sistema operacional.  A visão V$STATISTICS_LEVEL pode mostrar o que esse parâmetro controla.
MAX_DUMP_FILE_SIZE – define o tamanho máximo do arquivo trace gerado.

exemplo:

SQL> alter session set tracefile_identifier=’teste_trace’;
Session altered.

SQL> alter session set timed_statistics = true;
Session altered.

SQL> alter session set statistics_level = all;
Session altered.

SQL> alter session set max_dump_file_size = unlimited;
Session altered.

SQL> alter session set events ‘sql_trace level 4’;
Session altered.

SQL> select count(*) from user_tables;

COUNT(*)
———-
987

SQL> select count(*) from dba_tables;

COUNT(*)
———-
2970

SQL> alter session set events ‘sql_trace off’;

Session altered.

5. Encontrar a instrução sql rastreada. Você pode usar a exibição V$SQL

SQL> select sql_text, sql_id from v$sql
where sql_text=’select count(*) from dba_tables’;

SQL_TEXT                                                    SQL_ID
———————————-                     ————-
select count(*) from dba_tables        56bs32ukywdsq

6. Executando mais alguns passos,  as informações geradas no arquivo trace são armazenadas para o sql rastreado.

SQL> alter session set tracefile_identifier=’sql_trace_teste’;
Session altered.

SQL> alter session set events ‘sql_trace [sql:56bs32ukywdsq] level 4’;
Session altered.

SQL> select 1 from dual;

1
———-
1

SQL> select count(*) from user_tables;
COUNT(*)
———-
987

SQL> select count(*) from dba_tables;
COUNT(*)
———-
2970

SQL> alter session set events ‘sql_trace off’;
Session altered.

Verificando os arquivos gerados no servidor oracle:

-rw-r—– 1 oracle oinstall    125 Jun 22 10:49 orcl_ora_11951_teste_trace.trm
-rw-r—– 1 oracle oinstall    756 Jun 22 11:00 orcl_mmon_5213.trm
-rw-r—– 1 oracle oinstall   7992 Jun 22 11:00 orcl_mmon_5213.trc
-rw-r—– 1 oracle oinstall   9156 Jun 22 11:00 orcl_ora_11951_teste_trace.trc
-rw-r—– 1 oracle oinstall     83 Jun 22 11:00 orcl_ora_11951_sql_trace_teste.trm
-rw-r—– 1 oracle oinstall   4423 Jun 22 11:00 orcl_ora_11951_sql_trace_teste.trc

Nos próximos post, veremos  como rastrear uma sessão usando dbms_trace e  também o uso do TKPROF.

Um abraço

ORATOP – Utilitário para monitoramento quase em tempo real de bancos de dados, RAC e Single Instance

No post desta semana estarei falando acerca de uma ferramenta que vi ao consultar MOS (My Oracle Support),  essa ferramenta se chama ORATOP.
ORATOP é um Utilitário para monitoramento em tempo Próximo do real de Bancos de Dados Oracle, RAC e Single Instance. Essa ferramenta se baseia principalmente  em Wait  Events, trazendo também uma visão sobre as sessões que mais consumem recursos.
A ferramenta Oratop esta disponível para versões 11gR2 (11.2.0.3, 11.2.0.4) 12cR1  para Linux 32 e 64 bits.

O objetivo desta ferramenta é obter um rápido diagnostico do funcionamento da base de dados:

O objetivos principais incluem:
• Monitorar as atividades atual do banco de dados ,
• Monitorar o desempenho do banco de dados,
• Identificar possíveis contenções e gargalos

Baixei a ferramenta a fiz a instalação e testes com a mesma mai abaixo segue um roteiro com os passos para configuração e uso da ferramenta. O Documento do MOS para maiores informações e download do ORATOP é 1500864.1.

Passos para instalação e configuração da ferramenta ORATOP

1 – Efetue login no servidor com o usuário Oracle
Instalar o executável oratop no servidor no qual a ferramenta será executada. Em um sistema RAC é necessário apenas instalar o executável somente em um nó.

2 – Altere o nome do executável:
$ mv oratop* oratop

3 – Alterar a permissão do executável oratop para 755:
$ chmod 755 oratop

4 – Configure as variáveis de ambiente conforme abaixo:
$ export TERM=xterm  #or vt100
$ export ORACLE_HOME=<11.2 database home>
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_SID=<local 11.2 database SID to be monitored>  #only needed if connecting to a local database

5 – Agora abrimos o oratop:

$ ./oratop -i 10 / as sysdba

Aparecerá uma tela similar a tela abaixo:

oratop

Limitações do programa ORATOP:

• O programa não é multiplataforma, ele roda somente em plataformas Linux
• O programa é compatível com as versões  11.2 e 12cR1
• Requer que servidor tenha configurado o parâmetro STATISTICS_LEVEL = TYPICAL7

O utilitário oratop fornece ao  dba uma visão geral da atividade do banco de dados em execução.  Ele agrega diagnósticos úteis tais como, a degradação de desempenho do banco de dados, gargalos,  identifica bloqueios e etc. O utilitário também relata operações com SQL ruins.
Além disso, ele ajuda a ajustar alguns aspectos do banco de dados como a concorrência de usuários.