Browse By

Tip’s: Oracle Orion – OPatch – IO Calibrate

Preciso encontrar alguma maneira de conseguir ficar mais ativo nesse blog, postar algo de 6 em 6 meses, quase um ano não é muito legal… :(

Esse post é bem curto, somente para passar algumas informações que já eram para terem sido escritas a um bom tempo atrás.

Quem nunca precisou fazer um benchmark em um novo ambiente para conhecê-lo melhor e identificar seus limites como throughput/IOPS/CPU  e analisar se os valores obtidos foram satisfatórios ou se existe a necessidade de alguma configuração específica para conseguir melhorar esses números.  Falando em IO, cada banco de dados lê ou escreve dados no disco, o banco de dados gera I/O Disk. O desempenho de muitos aplicativos de software é inerentemente limitado pelo I/O. Os aplicativos que passam a maior parte do tempo de CPU esperando por atividade de I/O para completar pode se chamar de I/O-bound.

Se um aplicativo é bem escrito, o seu desempenho não deve ser limitado pelo I/O. O Tuning de I/O pode melhorar o desempenho do sistema se ele está operando 100%  ou perto de sua capacidade total, não sendo capaz de atender as solicitações de E/S dentro de um tempo aceitável. No entanto, o ajuste de I/O não pode ajudar o desempenho se o aplicativo não esta com problemas de E/S (por exemplo, quando a CPU é o fator limitante).

Para analisar essa camada (I/O), a Oracle possui o ORION uma ferramenta que serve para prever o desempenho de um futuro servidor de banco de dados sem que tenha o Software Oracle instalado ou um banco de dados na qual, permite realizar uma vasta quantidade de testes sobre o ambiente, informando os valores alcançados em IOPS / MBPS / Latência e etc –MAS– a informação interessante nesse POST seria que na release do Oracle database 11.2 o Orion já vem totalmente integrado no software, dessa forma, não é mais necessário realizar o download a parte dessa ferramenta para executar os testes, basta instalar o Software Oracle 11.2 e pronto, no $ORACLE_HOME/bin estará o nosso amigo orion.

Após a instalação do software (Não é necessário criar o banco de dados e seria melhor realizar esses testes sem que exista um pois tem uma opção no orion (write) que pode apagar o que estiver nos discos que estão sendo testados, então tome muito cuidado) é só escolher qual a melhor opção de execução dos testes para o seu ambiente lembrando que o Orion já possui algumas configurações prontas para testes como por exemplo para ambiente OLTP ou DSS ou você pode configurar outras dependendo da sua necessidade.

Para conhecer as opções disponíveis é necessário somente executar o comando:

orion -help

Aqui é um pequeno teste: (Orion usa asynchronous i/o então não esqueça de configurar o SO para isso.)

1- Criar o arquivo, no meu caso chamado: mytest.lun onde colocarei o caminho das luns ou multipath ou RAW e etc na qual quero realizar o teste de IO.

[srvbdwp tmp]# cat mytest.lun
/dev/mapper/mpathe
/dev/mapper/mpathf

2- Iniciando a coleta de informações. Na opção -testname coloque o nome do arquivo criado acima sem a extensão.

[srvbdwp tmp]# $ORACLE_HOME/bin/orion -run normal -testname mytest
ORION: ORacle IO Numbers -- Version 11.2.0.3.0
mytest_20130508_1635
Calibration will take approximately 56 minutes.
Using a large value for -cache_size may take longer.
Error completing IO
(storax_aiowait)
ORA-27061: waiting for async I/Os failed
Linux-x86_64 Error: 14: Bad address
Additional information: -1
Additional information: 8192
Test aborted due to errors.

Ops… As coisas não são tão fáceis quanto parecem ser. Esse erro é um BUG conhecido na versão Oracle 11.2.0.3 mas existe uma correção. Pesquise pelo Bug ID 15597001

Após realizar o download do patch e seguir o pré requisito, vamos a uma dica sobre o OPatch. Geralmente (pelo menos no meu caso) costumamos aplicar as correções CPU’s ou outros patchs que a Oracle disponibiliza de tempos em tempos, mas as vezes algum patch/oneff patch pode conflitar com algum outro já aplicado no ambiente e gerar um erro onde nesse caso, será necessário realizar um rollback da instalação do patch recém aplicado e torcer para que tudo tenha ocorrido bem.

Mas para facilitar nossa vida, existem algumas opções que podem ser usadas no comando opatch para analisar esses possíveis problemas antes de realmente aplicarmos o patch. O comando que utilizo para averiguar se existe ou não algum conflito seria:

opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir ./<patch-dir>

./<patch-dir> Seria a pasta do download do patch descompactado

[srvbdwp db_1]$ opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u01/9104898
Oracle Interim Patch Installer version 11.2.0.3.0
Copyright (c) 2012, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /u01/app/oracle/product/11.2.0/db_1
Central Inventory : /u01/app/oraInventory
 from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc
OPatch version : 11.2.0.3.0
OUI version : 11.2.0.3.0
Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2013-05-08_17-29-01PM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.

Como podemos ver acima, no meu ambiente esse novo patch pode ser aplicado sem problemas pois os outros existentes não irão conflitar. Caso mostrasse algum conflito eu já poderia me adiantar e analisar antes que o erro me pegasse de surpresa.

[oracle@srvbddsr db_1]$ cd /u01/9104898/
[oracle@srvbddsr 9104898]$ opatch apply
Oracle Interim Patch Installer version 11.2.0.3.0
Copyright (c) 2012, Oracle Corporation. All rights reserved.
Oracle Home : /u01/app/oracle/product/11.2.0/db_1
Central Inventory : /u01/app/oraInventory
 from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc
OPatch version : 11.2.0.3.0
OUI version : 11.2.0.3.0
Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/9104898_May_08_2013_17_30_04/apply2013-05-08_17-30-04PM_1.log
Applying interim patch '9104898' to OH '/u01/app/oracle/product/11.2.0/db_1'
Verifying environment and performing prerequisite checks...
All checks passed.
Provide your email address to be informed of security issues, install and
initiate Oracle Configuration Manager. Easier for you if you use your My
Oracle Support Email address/User Name.
Visit http://www.oracle.com/support/policies.html for details.
Email address/User Name:
You have not provided an email address for notification of security issues.
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: Y
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/app/oracle/product/11.2.0/db_1')
Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Patching component oracle.rdbms, 11.2.0.3.0...
Patching component oracle.rdbms.rsf, 11.2.0.3.0...
Patching component oracle.rdbms.deconfig, 11.2.0.3.0...
Verifying the update...
Patch 9104898 successfully applied
Log file location: /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/9104898_May_08_2013_17_30_04/apply2013-05-08_17-30-04PM_1.log
OPatch succeeded.

Pronto, aplicado com sucesso. Antes de prosseguirmos com o teste do Orion, segue outros comandos úteis do OPatch:

opatch napply -skip_subset -skip_duplicate –(If a subset or duplicate is found, the patch installation will continue)
opatch lsinventory -bugs_fixed asc                 –Lista os patchs aplicados por BUG
opatch lsinventory -detail                                  –Lista detalhes de cada patch aplicado
opatch rollback -local -id patch_id -oh <ORACLE_HOME>  — Faz rollback do patch id aplicado no node local

 

Continuando… Execução do Orion. Para conhecer melhor o que a opção “normal” e outras que eu executei no comando abaixo faz (como -num_disks que seriam a quantidade de discos que existem na LUN), execute o comando orion -help e aproveite e conheca as outras opções. Lembre de executar o comando no mesmo diretório onde foi criado o arquivo mytest.lun que mapeamos os discos.

[srvbdwp tmp]# $ORACLE_HOME/bin/orion -run normal -testname mytest -num_disks 2
ORION: ORacle IO Numbers -- Version 11.2.0.3.0
mytest_20130508_1735
Calibration will take approximately 375 minutes.
Using a large value for -cache_size may take longer.
Maximum Large MBPS=396.54 @ Small=0 and Large=15
Maximum Small IOPS=1824 @ Small=40 and Large=0
Small Read Latency: avg=21909 us, min=165 us, max=845529 us, std dev=29763 us @ Small=40 and Large=0
Minimum Small Latency=10629 usecs @ Small=1 and Large=2
Small Read Latency: avg=10629 us, min=267 us, max=99466 us, std dev=6570 us @ Small=1 and Large=2
Small Read / Write Latency Histogram @ Small=40 and Large=0
 Latency: # of IOs (read) # of IOs (write)
 0 - 1 us: 0 0
 2 - 4 us: 0 0
 4 - 8 us: 0 0
 8 - 16 us: 0 0
 16 - 32 us: 0 0
 32 - 64 us: 0 0
 64 - 128 us: 0 0
 128 - 256 us: 0 0
 256 - 512 us: 68 0
 512 - 1024 us: 36 0
 1024 - 2048 us: 1 0
 2048 - 4096 us: 176 0
 4096 - 8192 us: 2132 0
 8192 - 16384 us: 2329 0
 16384 - 32768 us: 833 0
 32768 - 65536 us: 66 0
 65536 - 131072 us: 1 0
 131072 - 262144 us: 0 0
 262144 - 524288 us: 0 0
 524288 - 1048576 us: 0 0
 1048576 - 2097152 us: 0 0
 2097152 - 4194304 us: 0 0
 4194304 - 8388608 us: 0 0
 8388608 - 16777216 us: 0 0
 16777216 - 33554432 us: 0 0
 33554432 - 67108864 us: 0 0
 67108864 - 134217728 us: 0 0
134217728 - 268435456 us: 0 0

Note que foram criados alguns arquivos dentro do diretório:

Dentro desses arquivos você encontrará as informações sobre a latência, IOPS e MBPS que seu ambiente alcançou inclusive em arquivos .csv que você pode utilizar para criar gráficos e brincar da maneira que achar melhor.

Esses testes foram executados sem um banco de dados criado pois esse é o objetivo do Orion. 

Caso você já possua um servidor com o banco de dados criado mas gostaria de testá-lo também, fique tranquilo, existe uma procedure  que pode ajuda-lo a ter uma noção da capacidade do sistema de IO a partir de dentro do Oracle, conheça a DBMS_RESOURCE_MANAGER.CALIBRATE_IO

Para que esse procedimento funcione, é necessário ter o parâmetro TIMED_STATISTICS setado para true e o parâmetro STATISTICS_LEVEL para TYPICAL. Os datafiles devem estar configurados para serem acessados via asynchronous I/O. (Opção default se usando ASM). Para analisar se os datafiles estão configurados corretamente, faça a consulta abaixo:

SELECT f.name,
 stat.asynch_io
FROM v$datafile f,
 v$iostat_file stat
WHERE f.file# = stat.file_no
AND stat.filetype_name = 'Data File';
NAME                                         ASYNCH_IO
----------------------------------------      -----
/u01/app/oracle/oradata/teste/system01.dbf  ASYNC_ON
/u01/app/oracle/oradata/teste/sysaux01.dbf  ASYNC_ON
/u01/app/oracle/oradata/teste/undotbs01.dbf ASYNC_ON
/u01/app/oracle/oradata/teste/users01.dbf   ASYNC_ON

Caso estejam OFF (ASYNC_OFF), é necessário alterar o parametro:

ALTER SYSTEM SET filesystemio_options=setall SCOPE=SPFILE;

(Antes veja se o SO esta configurado corretamente para utilização do Async IO)

Connect como SYSDBA e execute o bloco abaixo: (Notem que precisam modificar o num_physical_disks para a quantidade de seu ambiente)

CONN / AS SYSDBA
SET SERVEROUTPUT ON
DECLARE
 l_latency PLS_INTEGER;
 l_iops PLS_INTEGER;
 l_mbps PLS_INTEGER;
BEGIN
 DBMS_RESOURCE_MANAGER.calibrate_io (num_physical_disks => 2,
 max_latency => 20,
 max_iops => l_iops,
 max_mbps => l_mbps,
 actual_latency => l_latency);

 DBMS_OUTPUT.put_line('Max IOPS = ' || l_iops);
 DBMS_OUTPUT.put_line('Max MBPS = ' || l_mbps);
 DBMS_OUTPUT.put_line('Latency = ' || l_latency);
END;
/
Max IOPS = 1100 Max MBPS = 335 Latency = 20
PL/SQL procedure successfully completed.

Após executar o bloco acima, você pode analisar os resultados na view abaixo:

SET LINESIZE 1000
COLUMN start_time FORMAT A20
COLUMN end_time FORMAT A20
SELECT TO_CHAR(start_time, 'DD-MON-YYY HH24:MI:SS') AS start_time,
 TO_CHAR(end_time, 'DD-MON-YYY HH24:MI:SS') AS end_time,
 max_iops,
 max_mbps,
 max_pmbps,
 latency,
 num_physical_disks AS disks
FROM dba_rsrc_io_calibrate;
START_TIME END_TIME MAX_IOPS MAX_MBPS MAX_PMBPS LATENCY DISKS -------------- ------------ ------------ ------------ ---------------  --------- ----- 01-MAY-013 13:01:15 01-MAY-013 13:33:10 110 335 287 20 8

 

Conclusão: Na release 11.2 o Orion ja esta incorporado e torna o nosso trabalho mais dinâmico além de que você pode utilizar a procedure DBMS_RESOURCE_MANAGER.CALIBRATE_IO em ambientes que já possuem bancos criados e lembre de usufruir das melhores opções do OPatch antes de aplicar qualquer atualização.

Forte abraço

Leave a Reply

Your email address will not be published. Required fields are marked *