Por Alex Zaballa y Yenugula Venkata RaviKumar (Oracle Certified Master)
Postado em Março 2015
Revisado por Marcelo Pirovar - Solution Architect
Introdução
A distribuição dos recursos não é um tema novo quando falamos de banco de dados Oracle, porém estamos acostumados a ouvir falar sobre a possibilidade de distribuir e controlar os recursos de CPU. Agora iremos falar sobre um recurso que está presente no Oracle Database Machine, que é a possibilidade de distribuição dos recursos de leitura e escrita (I/O), que se tornou possível graças ao Exadata Storage Server.
O IORM é um componente muito importante dentro do Exadata Storage Server, que tem como objetivo distribuir os recursos de I/O. Isto é muito útil, por exemplo em um Exadata, quando possuímos diferentes bancos de dados, com diferentes cargas de trabalho e que podem competir entre si pelos recursos. Um banco de dados com alta carga transacional (OTLP), pode sofrer esperas devido a estas constantes competições por recursos de I/O. O correto seria atribuir mais recursos de I/O para estes bancos de dados que possuem maior demanda e atribuir poucos recursos aos bancos de dados de menor prioridade.
O IORM nos permite administrar os recursos de I/O para diferentes finalidades, tais como:
I/O Resource Management
Intradatabase: Os planos de recursos dentro de um banco de dados são atribuídos a grupos de consumidores. Por exemplo, se em um mesmo banco de dados existem duas aplicações, uma que executa tarefas de I/O do tipo OLTP e outra que executa tarefas do tipo Datawarehouse, poderíamos criar dois grupos de consumidores e atribuir recursos I/O para cada um desses grupos. Estes tipos de planos são chamados de intradatabase, porque só serão distribuídos recursos I/O dentro de um único banco de dados. Os planos intradatabase são criadas pelo Database Resource Manager (DBRM).
Interdatabase: Estes planos servem para distribuir os recursos de I/O aos diversos bancos de dados. Em tais planos, o IORM determina a prioridade do I/O com base no nome do banco de dados e assim faz a distribuição dos recursos, ao contrário dos planos intradatabase, que foram distribuídos aos grupos de consumidores dentro de um mesmo banco de dados. Isso geralmente é usado para evitar que os bancos de dados passem a competir entre si por recursos I/O.
Categories: Os planos por categoria fazem uso dos planos interdatabase e dos planos intradatabase para alocar recursos. Neste tipo de plano, os recursos de I/O são distribuídos entre os diferentes grupos de consumidores, mas através de todos os bancos de dados existentes. Para fazer isso, cada grupo de consumidores em cada um dos bancos de dados devem estar relacionados a uma determinada categoria.
Como é a alocação dos recursos quando existem diferentes planos?
Arquitetura do IORM
IORM Objective
A diretiva Objective determina como o balanceamento de carga de I/O será aplicado em cada célula:
Habilitar o IORM dentro de um banco de dados:
Habilitar o IORM em diversos banco de dados:
Como monitorar o IORM?
Consultar o banco de dados que consome mais recursos:
Consultar quanto tempo um banco de dados esperou por recursos:
Demonstrando o IORM
Na demonstração a seguir, serão utilizados dois bancos de dados:
Estes dois bancos de dados irão compartilhar os recursos de duas Oracle Exadata Cells (cell1 e cell2). Nesta demonstração, iremos criar duas Tablespaces ao mesmo tempo, uma em cada um dos bancos de dados. A primeira parte, sem o IORM, assim poderemos ver os dois bancos de dados entrando em conflito para obter o máximo de recursos de I/O possível. Na segunda parte da demonstração, faremos uso do IORM, de modo que serão atribuídos recursos de I/O a cada um dos banco de dados, a fim de evitar tal conflito.
Primeira parte – Sem o IORM
Efetuar a conexão no banco de dados orcl:
[oracle@dbnode ~]$ export ORACLE_SID=orcl [oracle@dbnode ~]$ export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 [oracle@dbnode bin]$ sqlplus /nolog SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 18 09:52:03 2013 Copyright (c) 1982, 2011, Oracle. All rights reserved. SQL> conn sys/oracle@orcl as sysdba Connected. SQL> set timing on
Efetuar a conexão no banco de dados iormdb:
[oracle@dbnode ~]$ export ORACLE_SID=iormdb [oracle@dbnode ~]$ export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 [oracle@dbnode bin]$ sqlplus /nolog SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 18 09:52:38 2013 Copyright (c) 1982, 2011, Oracle. All rights reserved. SQL> conn sys/oracle@iormdb as sysdba Connected. SQL> set timing on
Criar duas Tablespaces simultaneamente, cada uma em um dos bancos de dados :
SQL> create bigfile tablespace test datafile '+DATA' size 1G; Tablespace created. Elapsed: 00:17:09.37
SQL> create bigfile tablespace test datafile '+DATA' size 1G; Tablespace created. Elapsed: 00:17:14.73
Ao criar as Tablespaces nos bancos de dados orcl e iormdb, os Storage Servers são consultados periodicamente para avaliar os recursos de I/O que cada um dos bancos de dados estão consumindo.
Revisão das métricas na Cell1:
CellCLI> list metriccurrent CD_IO_BY_W_LG_SEC where metricobjectname like 'CD.*' CD_IO_BY_W_LG_SEC CD_DISK01_cell1 0.000 MB/sec CD_IO_BY_W_LG_SEC CD_DISK02_cell1 0.000 MB/sec CD_IO_BY_W_LG_SEC CD_DISK03_cell1 0.426 MB/sec CD_IO_BY_W_LG_SEC CD_DISK04_cell1 0.921 MB/sec
Revisão das métricas na Cell2:
CellCLI> list metriccurrent CD_IO_BY_W_LG_SEC where metricobjectname like 'CD.*' CD_IO_BY_W_LG_SEC CD_DISK01_cell2 0.000 MB/sec CD_IO_BY_W_LG_SEC CD_DISK02_cell2 0.000 MB/sec CD_IO_BY_W_LG_SEC CD_DISK03_cell2 0.467 MB/sec CD_IO_BY_W_LG_SEC CD_DISK04_cell2 1.002 MB/sec
Nota: Repare que sem um plano de IORM, os tempos de execução são quase idênticos, pois os bancos de dados estavam concorrendo por recursos de I/O.
Segunda Parte – Com o IORM
Configurar o IORMPLAN na Cell1:
CellCLI> alter iormplan dbplan=((name=orcl, level=1, allocation=90), (name=iormdb, level=1, allocation=10),(name=other, level=2, allocation=100)) IORMPLAN successfully altered CellCLI> alter iormplan active IORMPLAN successfully altered CellCLI> list iormplan detail name: cell1_IORMPLAN catPlan: dbPlan: name=orcl,level=1,allocation=90 name=iormdb,level=1,allocation=10 name=other,level=2,allocation=100 objective: basic status: active
Configurar o IORMPLAN na Cell2:
CellCLI> alter iormplan dbplan=((name=orcl, level=1, allocation=90), (name=iormdb, level=1, allocation=10),(name=other, level=2, allocation=100)) IORMPLAN successfully altered CellCLI> alter iormplan active IORMPLAN successfully altered CellCLI> list iormplan detail name: cell2_IORMPLAN catPlan: dbPlan: name=orcl,level=1,allocation=90 name=iormdb,level=1,allocation=10 name=other,level=2,allocation=100 objective: basic status: active
Verificar o status do IORMPLAN:
[celladmin@cell1 ~]$ cellcli -e list iormplan cell1_IORMPLAN active [celladmin@cell2 ~]$ cellcli -e list iormplan cell2_IORMPLAN active
Criar duas Tablespaces simultaneamente, cada uma em um dos bancos de dados:
SQL> create bigfile tablespace test1 datafile '+DATA' size 1G; Tablespace created. Elapsed: 00:08:12.15
SQL> create bigfile tablespace test1 datafile '+DATA' size 1G; Tablespace created. Elapsed: 00:17:51.32
Revisão das métricas na Cell1:
CellCLI> list metriccurrent CD_IO_BY_W_LG_SEC where metricobjectname like 'CD.*' CD_IO_BY_W_LG_SEC CD_DISK01_cell1 0.002 MB/sec CD_IO_BY_W_LG_SEC CD_DISK02_cell1 0.000 MB/sec CD_IO_BY_W_LG_SEC CD_DISK03_cell1 0.310 MB/sec CD_IO_BY_W_LG_SEC CD_DISK04_cell1 0.802 MB/sec
Revisão nas métricas na Cell2:
CellCLI> list metriccurrent CD_IO_BY_W_LG_SEC where metricobjectname like 'CD.*' CD_IO_BY_W_LG_SEC CD_DISK01_cell2 0.009 MB/sec CD_IO_BY_W_LG_SEC CD_DISK02_cell2 0.000 MB/sec CD_IO_BY_W_LG_SEC CD_DISK03_cell2 0.894 MB/sec CD_IO_BY_W_LG_SEC CD_DISK04_cell2 0.485 MB/sec
Nota: Uma vez configurado o IORM nos dois Oracle Exadata Cells, alocando 90% dos recursos para o banco de dados orcl e os 10% restantes para o banco de dados iormdb, podemos observar que ao criar as Tablespaces simultaneamente em ambos os bancos de dados, o banco iormdb demorou muito mais tempo para criar a Tablespace, no entanto o banco orcl que teve a maioria dos recursos assegurados terminou a tarefa rapidamente.
Alex Zaballa, formado em Análise de Sistemas, é especialista em Banco de Dados Oracle com sólidos conhecimentos em Servidores de Aplicação e Sistemas Operacionais; trabalha com Oracle há 15 anos, é ORACLE ACE, certificado OCM Database 11G e conta com mais de 140 outras certificações em produtos da Oracle. Alex também é fundador do Grupo de Usuários Oracle de Angola (GUOA) e membro do time OraWorld.
Yenugula Venkata Ravikumar é um DBA com mais de 15 anos de experiencia com Oracle e em ambientes de alta disponibilidade (RAC, Data Guard, dentre outros), tuning e desempenho, migrações, backup e recover, Oracle Exadata X2 e X3, é Expert em sistemas operacionais tais como como AIX, HP-UX e Linux. Já participou como conferencista de Oracle pela India, onde mora atualmente. Obteve o título de "Oracle Certified Master (OCM 10g)" em 2009.
Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.