Script para criação dinâmica de AWR
dezembro 16, 2014

O relatórios do Automatic Workload Repository (AWR), é com certeza uma das maiores armas que temos para realizar troubleshooting em um ambiente banco de dados Oracle. A análise de AWR, é uma consequência natural do dia a dia de um DBA, eu mesmo (principalmente no início da carreira) já passei incontáveis horas e horas (e mais horas) investigando e tentando entender cada uma das informações fornecidas no relatório.

O gerador de AWR apresentado aqui neste post, foi criado através de uma necessidade que encontrei afim de obter o máximo de informações possíveis contidas nos relatórios. Como consultor, deparo com situações onde a análise de Performance Diagnostics and Tuning é realizada um dia depois do incidente, assim o AWR pode ser uma grande ajuda nesses casos.

Um grande erro que mascara as informações do AWR, é gerar o relatório com um grande período de dados, como por exemplo gerar um único report com informações contidas entre as 08 da manhã até as 6 da tarde, isso acaba mascarando os dados e muitas vezes escondendo o real problema com informações irrelevantes fazendo você perder muito tempo consultando um relatório e não apresenta nenhum dado util. Assim, nesses casos o recomendado é você gerar vários reports para cada intervalo das snap entre 08 da manhã até as 6 da tarde. É aí que entra o script gerador de AWR, que ao contrário do script fornecido pela Oracle awrrp.sql que gera apenas um único relatório entre dois pontos no tempo, o gerador AWR consegue produzir vários relatório AWR entre o range de snapshot id fornecido, tendo como exemplo o caso do relatório entre as 8 da manhã as 6 da tarde, o script gerador awr irá produzir um relatório AWR para as 08 da manhã, um outro relatório para as 9 da manhã, outro para as 10 da manhã e assim por diante … até o snapshot id da 6 horas da tarde.

Apenas 4 parâmetros serão solicitados para a execução do script:

1 parâmetro: O tipo do relatório que você deseja gerar, html ou text.
2 parâmetro: A quantidade de dias que será listado os snapid na tela. Apenas para poder visualizar os snapshotid disponíveis.
3 parâmetro: O snapshot id inicial
4 parâmetro: O snapshot id final

Veja a execução do script gerador_awr.sql:


SQL> @gerador_awr
====> Showing the AWR Settings Inverval/Retention

	   Minute	      Minute		   Days
Snapshot Interval Snapshot Retention Snapshot Retention
----------------- ------------------ ------------------
	       60	       11520		      8


====> Entering the type of AWR Report: [html/text]: text


====> Entering the number of days of snapshots listed: 1

	DBID INST_ID INSTANCE_NAME   STARTUP_TIME		  SNAP_ID BEGIN_TIME		       END_TIME 		    ERROR_COUNT
------------ ------- --------------- ---------------------------- ------- ---------------------------- ---------------------------- -----------
   665418562	   1 dbtst1	     11/10/2014 19:57		     2626 15/12/2014 00:00	       15/12/2014 01:00 		      0
								     2627 15/12/2014 01:00	       15/12/2014 02:00 		      0
								     2628 15/12/2014 02:00	       15/12/2014 03:00 		      0
								     2629 15/12/2014 03:00	       15/12/2014 04:00 		      0
								     2630 15/12/2014 04:00	       15/12/2014 05:00 		      0
								     2631 15/12/2014 05:00	       15/12/2014 06:00 		      0
								     2632 15/12/2014 06:00	       15/12/2014 07:00 		      0
								     2633 15/12/2014 07:00	       15/12/2014 08:00 		      0
								     2634 15/12/2014 08:00	       15/12/2014 09:00 		      0
								     2635 15/12/2014 09:00	       15/12/2014 10:00 		      0
								     2636 15/12/2014 10:00	       15/12/2014 11:00 		      0
								     2637 15/12/2014 11:00	       15/12/2014 12:00 		      0
								     2638 15/12/2014 12:00	       15/12/2014 13:00 		      0
								     2639 15/12/2014 13:00	       15/12/2014 14:00 		      0
								     2640 15/12/2014 14:00	       15/12/2014 15:00 		      0
								     2641 15/12/2014 15:00	       15/12/2014 16:00 		      0
								     2642 15/12/2014 16:00	       15/12/2014 17:00 		      0
								     2643 15/12/2014 17:00	       15/12/2014 18:00 		      0
								     2644 15/12/2014 18:00	       15/12/2014 19:00 		      0
								     2645 15/12/2014 19:00	       15/12/2014 20:00 		      0
								     2646 15/12/2014 20:00	       15/12/2014 21:00 		      0
								     2647 15/12/2014 21:00	       15/12/2014 22:00 		      0
								     2648 15/12/2014 22:00	       15/12/2014 23:00 		      0
								     2649 15/12/2014 23:00	       16/12/2014 00:00 		      0




====> Entering the BEGIN SNAP ID : 2630

====> Entering the END SNAP ID : 2640


Generation AWR SNAPID ...2630 TO 2640
WORKLOAD REPOSITORY report for

DB Name 	DB Id	 Instance     Inst Num Startup Time    Release	   RAC
------------ ----------- ------------ -------- --------------- ----------- ---
dbtst        665418562 dbtst1	     1 11-Oct-14 19:57 11.2.0.4.0  YES

Host Name	 Platform			  CPUs Cores Sockets Memory(GB)
---------------- -------------------------------- ---- ----- ------- ----------
dm01dbadm01.pass Linux x86 64-bit		    48	  24	   2	 251.99

	      Snap Id	   Snap Time	  Sessions Curs/Sess Instances
	    --------- ------------------- -------- --------- ---------
Begin Snap:	 2630 15-Dec-14 05:00:00     2,368	 4.9	     2
  End Snap:	 2631 15-Dec-14 06:00:03     2,368	 4.9	     2
   Elapsed:		  60.04 (mins)
   DB Time:		   0.17 (mins)

Load Profile			Per Second   Per Transaction  Per Exec	Per Call
~~~~~~~~~~~~~~~ 	   ---------------   --------------- --------- ---------
	     DB Time(s):	       0.0		 0.4	  0.00	    0.00
	      DB CPU(s):	       0.0		 0.4	  0.00	    0.00
      Redo size (bytes):	     634.1	    95,187.8
  Logical read (blocks):	      30.7	     4,603.3
	  Block changes:	       1.6	       240.5
 Physical read (blocks):	       0.0		 1.3
Physical write (blocks):	       0.2		33.8
       Read IO requests:	       0.0		 1.3
      Write IO requests:	       0.2		26.6
	   Read IO (MB):	       0.0		 0.0
	  Write IO (MB):	       0.0		 0.3
 RAC GC blocks received:	       0.2		32.7
   RAC GC blocks served:	       0.1		21.8
	     User calls:	       1.6	       233.1
	   Parses (SQL):	       1.0	       151.2
      Hard parses (SQL):	       0.0		 5.3
     SQL Work Area (MB):	       0.1		16.5
		 Logons:	       0.1		11.0
	 Executes (SQL):	       1.7	       249.7
	      Rollbacks:	       0.0		 0.0
	   Transactions:	       0.0

Instance Efficiency Percentages (Target 100%)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	    Buffer Nowait %:  100.00	   Redo NoWait %:  100.00
	    Buffer  Hit   %:   99.97	In-memory Sort %:  100.00


output removido
output removido
...
...
output removido
output removido


	.00	   0	    0	     0	      0
			  ------------------------------------------------------

Dynamic Remastering Stats	   DB/Inst: PREPROD/preprod1  Snaps: 2638-2639

		  No data exists for this section of the report.
			  ------------------------------------------------------

End of Report


AWR begin snap 2630 to end snap 2631 generated, file: gen_awr_dbtst1_2630_2631_report.txt
AWR begin snap 2631 to end snap 2632 generated, file: gen_awr_dbtst1_2631_2632_report.txt
AWR begin snap 2632 to end snap 2633 generated, file: gen_awr_dbtst1_2632_2633_report.txt
AWR begin snap 2633 to end snap 2634 generated, file: gen_awr_dbtst1_2633_2634_report.txt
AWR begin snap 2634 to end snap 2635 generated, file: gen_awr_dbtst1_2634_2635_report.txt
AWR begin snap 2635 to end snap 2636 generated, file: gen_awr_dbtst1_2635_2636_report.txt
AWR begin snap 2636 to end snap 2637 generated, file: gen_awr_dbtst1_2636_2637_report.txt
AWR begin snap 2637 to end snap 2638 generated, file: gen_awr_dbtst1_2637_2638_report.txt
AWR begin snap 2638 to end snap 2639 generated, file: gen_awr_dbtst1_2638_2639_report.txt

SQL> 

No final é apresentado os 9 relatórios AWR entre o range de snapshot fornecido.

Aqui está todos os reports AWR criados localmente pela execução do script:

Flavios-MacBook-Pro:~ flaviosoares$ ll gen_awr_dbtst1_263*
-rw-r--r--  1 flaviosoares  staff  113049600 Dec 16 00:10 gen_awr_dbtst1_2630_2631_report.txt
-rw-r--r--  1 flaviosoares  staff  114753536 Dec 16 00:11 gen_awr_dbtst1_2631_2632_report.txt
-rw-r--r--  1 flaviosoares  staff  113672192 Dec 16 00:11 gen_awr_dbtst1_2632_2633_report.txt
-rw-r--r--  1 flaviosoares  staff  113213440 Dec 16 00:11 gen_awr_dbtst1_2633_2634_report.txt
-rw-r--r--  1 flaviosoares  staff  114327552 Dec 16 00:11 gen_awr_dbtst1_2634_2635_report.txt
-rw-r--r--  1 flaviosoares  staff  120291328 Dec 16 00:11 gen_awr_dbtst1_2635_2636_report.txt
-rw-r--r--  1 flaviosoares  staff  125730816 Dec 16 00:11 gen_awr_dbtst1_2636_2637_report.txt
-rw-r--r--  1 flaviosoares  staff  115408896 Dec 16 00:11 gen_awr_dbtst1_2637_2638_report.txt
-rw-r--r--  1 flaviosoares  staff  113082368 Dec 16 00:11 gen_awr_dbtst1_2638_2639_report.txt

Notas do script:

- O script foi testado nas versões Oracle 11g/12c.
- O script foi testado em RAC e Single instance.
- É necessário a permissão de leitura e escrita no diretório atual da execução do script
- O script detecta automaticamente se existe um restate de instância entre o range de snapshot id fornecido e o avisa sobre o fato.
- Caso você queria executar o script em ambiente Windows, você obterá uma falha na hora de remover os arquivos temporários RUN_gen_awr_report.sql e store_set_saved.sql.


PARA O DOWNLOAD DO SCRIPT: gerador_awr.sql


Quais quer erros/sugestões/melhorias/bugs e afins por favor me avise, o script ainda está em faze de desenvolvimento …

Espero que esse script o ajude muito em seus troubleshooting :)

Um abraço

AWR – Medindo IOPS e Throughput de I/O do Oracle Database
agosto 27, 2014

Uma conseqüência natural do trabalho de um DBA é passar horas e horas em cima de um relatório AWR identificando problemas e causas de performance do banco de dados.

Um dos enganos mais comum da maioria é conseguir identificar o IOPS e throughput de I/O dentro do próprio Oracle AWR. Esse ponto é essencial para você conseguir definir a sua infra-estrutura de I/O para combinar com a sua aplicação e além de conseguir levantar dados para debater de forma inteligente com sua equipe de storage.

Antes, vamos realmente entender o que é IOPS e throughput de dados, que são termos completamente diferentes:

IOPS – É a unidade padrão que mensura uma operação de Input/Output (I/O) por segundo. Usado para descrever I/O rate de aplicações principalmente utilizado para acessos randômicos I/O (leituras de indexes) e aplicações do tipo OLTP.

Throughput (Mbytes/s) – Usado para mensurar grandes taxas de transferências de blocos. Usado principalmente para aplicações seqüenciais de dados como DSS e OLAP. (full table scan)

O relatório de AWR pode ser seu aliado para identificar essas métricas de I/O na sessão Instance Activity Stats:

IOPS = “physical read total I/O requests” + “physical write total I/O requests”
MBytes/s = “physical read total bytes” + “physical write total bytes”

Ou você pode utilizar a seguinte consulta para mostrar esses valores:

select min(begin_time), max(end_time),
sum(case metric_name when 'Physical Read Total Bytes Per Sec' then average end) Physical_Read_Total_Bps,
sum(case metric_name when 'Physical Write Total Bytes Per Sec' then average end) Physical_Write_Total_Bps,
sum(case metric_name when 'Physical Read Total IO Requests Per Sec' then average end) Physical_Read_IOPS,
sum(case metric_name when 'Physical Write Total IO Requests Per Sec' then average end) Physical_write_IOPS,
snap_id
from dba_hist_sysmetric_summary group by snap_id
order by snap_id;

Exemplo relatório AWR:

physical read total IO requests   =  1,257.23
physical write total IO requests  =  1,746.11
physical read total bytes         =  76,314,718.10
physical write total bytes        =  85,321,521.11

Com os dados acima do AWR reportado, temos: ~ 3003 IOPS e ~ 155 Mbytes/s

Esse método é interessante ser utilizado após mudança de equipamentos/aplicação ou até mesmo identificar gargalos do ambiente e resing necessários de Hardware. Com isso em mãos fica mais fácil dialogar sobre esses temas.

Com o Oracle 11g é possível obter dados de IOPS e throughput através do Oracle Calibrate (DBMS_RESOURCE_MANAGER.CALIBRATE_IO) que é utilizado para identificar até onde o meu Hardware pode chegar, assim o Oracle acaba utilizando esse método para várias operações internas, como por exemplo o AUTO DOP. Aqui o contexto é um pouco diferente, através das métricas de IOPS e throughput identificados pelo AWR, eu consigo além de definir por tempo, posso alcançar a métrica onde minha aplicação ou hardware está mais consumindo de I/O.

Considerações finais:

- Para ambientes RAC, você deve agregar os valores de IOPS e MBytes/s para todas as instâncias do RAC. Assim o IOPS e MBbytes no ambiente cluster será a soma de todos os valores de cada node.

- Utilize o AWR em cima dos horários de maior utilização do ambiente.

- Nunca utilize relatórios AWR mais do que 1 hora. É comum encontramos relatórios AWR das 09 as 18 horas por exemplo, isso pode mascarar o real problema do seu banco de dados. Utilize tempos curtos de 1 hora baseado nos picos de maior cargas no banco de dados.

- Para alcançar IOPS e Throughput desejado, não apenas discos pode ser a razão e sim uma série de fatores agrupados, como o próprio banco de dados, o block device manager, multipathing driver, SCSI driver, HBA, System Bus, Switch/iSCSI, Storage Array, Disks, RAID e etc .. por isso é importante avaliar cada quesito em particular quando se fala em performance de I/O.

AWR Formatter
agosto 4, 2011

Olá Pessoal

Já tenho utilizado a algum tempo é muito bom, principalmente para quem tem iniciado agora na analise de relatórios AWR.

Com o AWR Formatter você transforma aquele “HTML”zão  cheios de números em um formato muito mais legível, simples e de fácil entendimento, tem até comentários do próprio Tyler Muth no seu AWR, tenho aprendido muito … vale a pena.

O AWR Formatter é uma extensão (plugin) do chrome, com apenas 1 clique você instala com 2 você configura e  pronto! Já pode utilizar … Até o Tom Kyte (dispensa apresentação) já confessou que usa o AWR Formatter http://tkyte.blogspot.com/2011/04/two-things.html

 

Veja no próprio site do Tyler como instalar e configurar:
http://tylermuth.wordpress.com/2011/04/20/awr-formatter/

Gerar AWR linha comando
maio 10, 2011

O relatório AWR é muito para verificar waits, consultas entre outras de um determinado período. Existe uma maneira muito rápida de gerar relatório AWR através do SQL PLUS.

[oracle@oel510gfs ~]$  sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 9 12:57:45 2011

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

Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options

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

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

DB Id        DB Name      Inst Num  Instance
----------- ------------ -------- ------------
560958117     ORCL        1         orcl

Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Informe o valor para report_type: [ Pressione Enter, para gerar no padrão HTML ]

Type Specified:  html

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DB Id         Inst Num    DB Name   Instance    Host
------------ -------- ------------ ------------ ------------
* 560958117     1        ORCL       orcl         oel510gfs.localdomain

Using  560958117 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  without
specifying a number lists all completed snapshots.

Informe o valor para num_days: 2 

Listing the last 2 days of Completed Snapshots

Snap
Instance      DB Name      Snap Id    Snap Started      Level
------------ ------------ --------- ------------------ -----
vsteste       VSTESTE       5101 08 Mar 2011 00:00   1
5102      08 Mar 2011 01:00   1
5103      08 Mar 2011 02:00   1
5104      08 Mar 2011 03:00   1
5105      08 Mar 2011 04:00   1
5106      08 Mar 2011 05:00   1
5107      08 Mar 2011 06:00   1
5108      08 Mar 2011 07:00   1
5109      08 Mar 2011 08:00   1
5110      08 Mar 2011 09:00   1
5111      08 Mar 2011 10:00   1
5112      08 Mar 2011 11:00   1
5113      08 Mar 2011 12:00   1
5114      08 Mar 2011 13:00   1
5115      08 Mar 2011 14:00   1
5116      08 Mar 2011 15:00   1
5117      08 Mar 2011 16:00   1
5118      08 Mar 2011 17:00   1
5119      08 Mar 2011 18:00   1
5120      08 Mar 2011 19:00   1
5121      08 Mar 2011 20:00   1
5122      08 Mar 2011 21:00   1
5123      08 Mar 2011 22:00   1
5124      08 Mar 2011 23:00   1
5125      09 Mar 2011 00:00   1
5126      09 Mar 2011 01:00   1
5127      09 Mar 2011 02:00   1
5128      09 Mar 2011 03:00   1
5129      09 Mar 2011 04:00   1
5130      09 Mar 2011 05:00   1
5131      09 Mar 2011 06:00   1
5132      09 Mar 2011 07:00   1
5133      09 Mar 2011 08:00   1
5134      09 Mar 2011 09:00   1
5135      09 Mar 2011 10:00   1
5136      09 Mar 2011 11:00   1
5137 09 Mar 2011 12:00   1

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Informe o valor para begin_snap: 5101
Begin Snapshot Id specified: 5101

Informe o valor para end_snap: 5137
End   Snapshot Id specified: 5137

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_5101_5137.html.  To use this name,
press  to continue, otherwise enter an alternative.

Informe o valor para report_name: /oracle/temp/awrrpt_09032011.html

Using the report name /oracle/temp/awrrpt_09032011.html

...

Report written to /oracle/temp/awrrpt_09032011.html

SQL>

 

Erro ao gerar AWR
maio 10, 2011

Quando tentar obter um AWR e seguinte mensagem for mostrada:

WARNING (-20023)
ORA-20023: Missing start and end values for time model stat: parse time elapsed

WARNING (-20016)
ORA-20016: Missing value for SGASTAT: free memory

WARNING (-20009)
ORA-20009: Missing System Statistic logons current

Isso pode ser resolvido de duas formas:

Tentar alterar o parâmetro control_management_pack_access para DIAGNOSTIC+TUNING

SQL> show parameter control_management_pack_access

NAME                                     TYPE          VALUE
------------------------------------ ----------- ------------------------------
control_management_pack_access       string

SQL> alter system set control_management_pack_access='DIAGNOSTIC+TUNING';

Sistema alterado.

Espere um ou dois dias e execute novamente o AWR. Se o problema persistir o seu banco pode estar com problema e de acordo com o nota do metalink 1181573.1 será necessário aplicar o Patch 7532789.