Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] Medindo Throughput do Oracle Database com Calibrate I

Recommended Posts

Uma das dúvidas mais comuns de administradores de banco de dados é conseguir mensurar a quantidade de I/O ou throughput em MB de um banco de dados em relação aos dispositivos de armazenamento (storage).

 

Neste artigo, abordarei uma maneira bastante simples, porém eficiente, de calcular o throughput de um banco de dados Oracle, independentemente da plataforma.

 

DBMS_RESOURCE_MANAGER

 

O Oracle Database Resource Manager (DBRM) permite que o Oracle gerencie/limite recursos utilizados pelo banco de dados.

 

 

A partir da versão 11g, o Oracle Database oferece uma nova procedure na package DBMS_RESOURCE_MANAGER. Esta procedure é chamada de CALIBRATE_IO e tem a função principal de mensurar a capacidade de I/O do dispositivo de storage onde o banco foi criado. Através da execução via Bloco PL/SQL é possível fazer este cálculo de maneira bem simples. Abaixo está a descrição dos parâmetros da procedure CALIBRATE_IO.

 

 

Parâmetros

DBMS_RESOURCE_MANAGER.CALIBRATE_IO (

num_physical_disks IN PLS_INTEGER DEFAULT 1,

max_latency IN PLS_INTEGER DEFAULT 20,

max_iops OUT PLS_INTEGER,

max_mbps OUT PLS_INTEGER,

actual_latency OUT PLS_INTEGER);

Parâmetro Descrição num_physical_disks Número de discos físicos onde o Database está alocado. max_latency Tolerância máximo em milisegundos para requisições de I/O no banco de dados max_iops Número máximo de requisições de I/O por segundo que pode ser suportado pela estrutura de armazenamento. As requisições de I/O são distribuídas através de leitura de blocos do banco de dados. max_mbps Throughput máximo em MB/s que pode ser suportado pela estrutura de armazenamento. As requisições são distribuídas em leituras de 1MB. actual_latency Latência média em milisegundos para leitura de blocos do Database.

Pré-requisitos

Antes da execução, alguns pré-requisitos são necessários:

 

  • Usuário com Privilégio SYSDBA (normalmente executado com usuário SYS);
  • Parâmetro TIMED_STATISTICS=TRUE;
  • ASYNCH_IO habilitado para todos os arquivos do Database. Para verificar, pode-se executar o script abaixo:

col name format a50

SELECT name, asynch_io FROM v$datafile f,v$iostat_file i

WHERE f.file# = i.file_no

AND filetype_name = 'Data File'

/

  • Executar apenas uma operação (CALIBRATE) por vez;
  • Em ambientes com Oracle Real Application Clusters, a carga será distribuída entre todos os nodes.

Exemplo de execução

SET SERVEROUTPUT ON

DECLARE

lat INTEGER;

iops INTEGER;

mbps INTEGER;

BEGIN

-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>, iops, mbps, lat);

DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10, iops, mbps, lat);

 

DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);

DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);

dbms_output.put_line('max_mbps = ' || mbps);

end;

/O resultado de execução é demonstrado abaixo:

 

SQL> @calibrate

max_iops = 3100

latency = 20

max_mbps = 376O resultado de cada execução é demonstrado também na view DBA_RSRC_IO_CALIBRATE:

 

SQL> desc DBA_RSRC_IO_CALIBRATE

Name Null? Type

----------------------------------------- -------- ----------------------------

START_TIME TIMESTAMP(6)

END_TIME TIMESTAMP(6)

MAX_IOPS NUMBER

MAX_MBPS NUMBER

MAX_PMBPS NUMBER

LATENCY NUMBER

NUM_PHYSICAL_DISKS NUMBERComo somente a última execução da procedure CALIBRATE_IO é listada na view DBA_RSRC_IO_CALIBRATE, a sugestão é alterar a procedure CALIBRATE_IO para armazenar cada execução em uma tabela auxilar. Abaixo segue o exemplo:

 

SET SERVEROUTPUT ON

DECLARE

lat INTEGER;

iops INTEGER;

mbps INTEGER;

BEGIN

-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>, iops, mbps, lat);

DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10, iops, mbps, lat);

insert into CALIBRATE_REPORT as select * from DBA_RSRC_IO_CALIBRATE;

DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);

DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);

dbms_output.put_line('max_mbps = ' || mbps);

end;

/O tempo de execução está diretamente ligado a alguns fatores:

 

  • Performance na estrutura de armazenamento (storage);
  • Número de Datafiles;
  • Tamanho do Database.

Em storage compartilhados, por exemplo um ambiente clusterizado, a performance pode variar também de acordo com o número de nodes do Cluster.

 

 

Listando resultados

Após a execução, pode-se listar os resultados de duas maneiras:

 

  • Pelo output da Procedure:

SQL> @calibrate

max_iops = 3100

latency = 20

max_mbps = 376

  • Pela view DBA_RSRC_IO_CALIBRATE:

SELECT MAX_IOPS, MAX_MBPS, MAX_PMBPS, ACTUAL_LATENCY, NUM_PHYSICAL_DISKS FROM DBA_RSRC_IO_CALIBRATE;

 

MAX_IOPS MAX_MBPS MAX_PMBPS LATENCY NUM_PHYSICAL_DISKS

-------- ---------- ---------- ---------- ------------------

428 176 77 8 4*Esta lista somente a última execução. Implementando a alteração na execução da procedure CALIBRATE_IO, pode-se obter resultados de todas as execuções:

 

MAX_IOPS MAX_MBPS MAX_PMBPS LATENCY NUM_PHYSICAL_DISKS

-------- ---------- ---------- ---------- ------------------

428 176 77 8 4

524 173 76 21 4

537 183 74 28 4

598 174 78 38 4

 

Interpretando resultados

Os resultados acima demonstram o máximo atingido em operações de leitura nos discos do storage. O melhor resultado obtido foi de 428 operações de I/O por segundo (em média), com latência de 8ms.

 

Para calcular a média de I/O por segundo em cada disco, basta dividir este valor pelo número de discos: 428/4 = 107 operações de I/O por segundo para cada disco do storage.

 

Com estes resultados é possível gerar um gráfico de consumo de I/O e throughput com o resumo de execução:

 

46514.png

 

Como demonstrado no gráfico acima, o aumento (tolerância) de latência em milisegundos para operações no banco de dados não gera um aumento significativo de throughput nos discos do storage. Para operações em banco de dados (OLTP), a recomendação é manter o tempo médio de latência abaixo de 10ms. O throughput do storage em MB permaneceu o mesmo durante todo o teste, atingindo media de 176MB/s por operação de I/O.

 

 

Observações importantes:

  • Neste cenário, para aumentar o máximo de operações de I/O por segundo, é nécessário o aumentar o número de discos no storage ou ainda discos com maior performance;
  • O número máximo de operações de I/O pode, ou não, atender as necessidades de uma determinada aplicação. Isso dependerá das operações que a aplicação irá solicitar ao banco de dados;
  • Relatórios AWR podem também ajudar a encontrar alta latência em requisições de I/O ao banco de dados.

Os resultados se alternam conforme a configuração de hardware e software de cada ambiente analisado. É importante manter um throughput compatível com a necessidade do banco de dados afim de evitar problemas de performance no acesso à aplicações.

 

***

 

 

Fonte e mais informações:

 

 

http://imasters.com.br/artigo/24210/banco-de-dados/medindo-throughput-do-oracle-database-com-calibrate-io

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.