3 de mayo de 2014

Calibración de I/O

Una de las características que ofrece Oracle Database 11g es la calibración de I/O, lo que hace es emitir un intensa carga de trabajo de lectura de manera aleatoria para determinar las máximas IOPS (peticiones de E/S por segundo) y MBPS (megabytes de E/S por segundo) que puede sostener el sistema de almacenamiento.

Durante la calibración de I/O se genera una sobrecarga hacia la base de datos, por lo que se recomienda la ejecución durante las horas de menos actividad que minimizara la sobrecarga de I/O en horarios normales.

Para ejecutar la calibración de I/O utilizamos el procedimiento propio de Oracle DBMS_RESOURCE_MANAGER.CALIBRATE_IO, cuya sintaxis es la siguiente:

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);

Existen dos parámetros de entrada:
num_physical_disks: Número de discos fiscos en el almacenamiento de la base de datos, la cantidad de discos donde se encuentran los datafiles.
max_latency: Máxima latencia tolerable en milisegundos para las solicitudes de I/O.

Existen tres parámetros de salida:
max_iops: Número máximo de peticiones de I/O por segundo que pueden ser sostenido.
max_mbps: Maximo rendimiento de I/O que puede ser sostenido, expresado en megabytes por segundo.
actual_latency: Promedio de la latencia en solicitudes de I/O.

Antes de ejecutar la calibración debemos considerar los siguientes requerimientos:

Requerimiento 1. El usuario a ejecutar debe tener el privilegio SYSDBA (SYS)
bash-3.2$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Sat May 3 13:57:41 2014

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> show user    
USER is "SYS"

Requerimiento 2. El parámetro timed_statistics debe estar con el valor de TRUE
SQL> show parameter timed_statistics
NAME                            TYPE        VALUE
-----------------------------   ---------   -------------
timed_statistics                boolean     TRUE

Requerimiento 3. El I/O asíncrono de filesystem debe estar habilitado.
SQL> show parameter filesystemio_options
NAME                            TYPE        VALUE
-----------------------------   ---------   -------------
filesystemio_options            string      NONE

Si no estuviera con el valor de SETALL, asignar el parámetro con la siguiente instrucción.
SQL> alter system set filesystemio_options=SETALL scope= spfile;

SQL> show parameter filesystemio_options
NAME                            TYPE        VALUE
-----------------------------   ---------   -------------
filesystemio_options            string       SETALL

Requerimiento 4. En un ambiente de almacenamiento ASM se debe considerar que el parámetro de base de datos “disk_asynch_io” debe estar con el valor de “TRUE” para dar paso a la correcta calibración. Adicionalmente cuando el parámetro “disk_asynch_io” tenga asignado el valor de “true” se debe verificar que el parámetro de base de datos “DBWR_IO_SLAVES” este con el valor de 0.
SQL> show parameter disk_asynch_io
NAME                            TYPE        VALUE
-----------------------------   ---------   -------------
disk_asynch_io                  boolean     FALSE

Si no estuviera con el valor de TRUE asignar el parámetro ejecutando la siguiente instrucción:
SQL> alter system set disk_asynch_io =TRUE scope= spfile;

SQL> show parameter disk_asynch_io
NAME                            TYPE        VALUE
-----------------------------   ---------   -------------
disk_asynch_io                  boolean     TRUE

Nota. Para que se guarden los parámetros modificados “filesystemio_options”, “disk_asynch_io” y “dbwr_io_slaves” es necesario realizar el reinicio de la instancia de la base de datos.

Requerimiento 5. Asegurar que el I/O Asíncrono se encuentra habilitado para los datafiles, verificamos ejecutando el siguiente query:
SQL> COL NAME FORMAT A50
SQL> SELECT NAME,ASYNCH_IO FROM V$DATAFILE F,V$IOSTAT_FILE I WHERE F.FILE#=I.FILE_NO AND FILETYPE_NAME='Data File';
NAME                                            ASYNCH_IO
---------------------------------------------   --------
+DATA/orcl/datafile/system.256.833512537        ASYNC_OFF
+DATA/orcl/datafile/sysaux.257.833512537        ASYNC_OFF
+DATA/orcl/datafile/undotbs1.258.833512539      ASYNC_OFF
+DATA/orcl/datafile/users.259.833512539         ASYNC_OFF
+DATA/orcl/datafile/example.265.833512695       ASYNC_OFF
+DATA/orcl/datafile/high_dat.267.833566889      ASYNC_OFF
+DATA/orcl/datafile/high_dat.268.833569565      ASYNC_OFF

Después de haber modificado el parámetro "disk_asynch_io" al valor de "TRUE" nuestra configuración queda lista para su calibración.
NAME                                            ASYNCH_IO
---------------------------------------------   --------
+DATA/orcl/datafile/system.256.833512537        ASYNC_ON
+DATA/orcl/datafile/sysaux.257.833512537        ASYNC_ON
+DATA/orcl/datafile/undotbs1.258.833512539      ASYNC_ON
+DATA/orcl/datafile/users.259.833512539         ASYNC_ON
+DATA/orcl/datafile/example.265.833512695       ASYNC_ON
+DATA/orcl/datafile/high_dat.267.833566889      ASYNC_ON
+DATA/orcl/datafile/high_dat.268.833569565      ASYNC_ON

Una ves revisado los requisitos mencionados anteriormente se puede proceder a ejecutar la configuración de calibrado de I/O.

Ya ejecutado el procedimiento se dispone de vistas que nos ayudan a revisar la configuración de calibración realizada, estas vistas son V$IO_CALIBRATION_STATUS y DBA_RSRC_IO_CALIBRATE.

V$IO_CALIBRATION_STATUS.- Nos permite visualizar el estado de la calibración.
Estado antes de la calibración:
SQL> SELECT * FROM v$io_calibration_status;

STATUS         CALIBRATION_TIME
-------------  -----------------------------
NOT AVAILABLE

Estado durante la calibración:
SQL> SELECT * FROM v$io_calibration_status;

STATUS         CALIBRATION_TIME
-------------  -----------------------------
IN PROGRESS

Estado despues de la calibracion:
SQL> SELECT * FROM v$io_calibration_status;

STATUS         CALIBRATION_TIME
------------- -----------------------------
READY          03-MAY-2014 13:34:45.410
1 row selected.

DBA_RSRC_IO_CALIBRATE.- Nos permite visualizar la configuración de la calibración realizada.
SQL> SELECT * FROM DBA_RSRC_IO_CALIBRATE;

START_TIME           END_TIME              MAX_IOPS   MAX_MBPS  MAX_PMBPS   LATENCY     NUM_PHYSICAL_DISKS
------------------   -------------------   --------   --------  ----------  ---------   ----------------
03-MAY-14 01.47 PM   03-MAY-14 01.53 PM    56         28        26          17          2
1 row selected.

En el siguiente post Análisis y evaluación de resultados de la calibración de I/O se realizará el análisis minucioso antes, durante y después de la calibración, como también sus resultados.

Paulo Ticona.

Fuentes.
Oracle Database "Performance Tuning Guide" 11g Release 2 (11.2), E16638-05.
http://www.oracle-base.com/articles/11g/resource-manager-enhancements-11gr1.php
http://arup.blogspot.com/2008/08/resource-manager-io-calibration-in-11g.html
http://dbmstuning.wordpress.com/tag/io-calibration/

1 comentario:

  1. Mucha gracias Ingeniero. Claro y conciso y sobre todo preciso

    ResponderEliminar