Categorías

miércoles, 1 de octubre de 2008

Eliminando Contención de I/O

La contención de disco ocurre cuando múltiples procesos intentan acceder al mismo disco físico simultáneamente, lo que causa una baja en el rendimiento de la base de datos. En este artículo vamos a conocer un poco más en detalle como los escenarios en los que se da este problema y ciertos mecanismos para evitarlo.

La solución más obvia para reducir la contención de disco es reducir las entradas I/O. esto se logra distribuyendo las I/O sobre las diferentes unidades de disco lógicas que tiene el servidor. Para distribuir las entradas de I/O será necesario mover los Datafiles que estén saturados en lectura y escritura. Lo que se debe hacer primero es identificar dichos Datafiles mediante las vistas dinámicas V$FILESTAT y V$DATAFILE.

Nota: V$FILESTAT y V$DATAFILE no funcionan para Tablespaces temporales. Para monitorear tablespaces temporales se debe usar V$TEMPFILE y V$TEMPSTATS.

SQL> col name format a25

SQL> SELECT name, phyrds, phywrts, readtim, writetim 2
FROM v$filestat a, v$datafile b 3 WHERE a.file#=b.file#;

Mediante esta consulta es posible identificar los Datafiles que tienen la mayor cantidad de lecturas y escrituras. Una vez identificados los Datafiles procedemos a mover los tablespaces a otra unidad/partición para equilibrar I/O: Para esto tenemos que seguir los siguientes pasos:


  • Tomamos el tablespace correspondiente al datafile que tiene la mayor cantidad de I/O y lo ponemos en estado Offline

SQL> ALTER TABLESPACE USERS OFFLINE;

  • Copiamos el Datafile a la nueva ubicación (En otra partición/disco)
  • Renombramos el Datafile apuntándolo a la nueva ubicación

SQL> ALTER DATABASE USERS RENAME DATAFILE
2 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\USERS01.dbf' to
3 'H:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\USERS01.dbf';

  • Volvemos a poner el tablespace en estado Online

SQL> ALTER TABLESPACE USERS OFFLINE;

  • Verificamos si el Control File actualizó la base de datos mediante la vista dinámica V$DATAFILE

SQL> col name format a50
SQL> select file#, name from v$datafile;

sábado, 20 de septiembre de 2008

Entendiendo Como Oracle Arranca

En este artículo vamos a tratar de explicar de una manera muy sencilla como intervienen los procesos de una instancia de Oracle cuando esta es iniciada.

Primero hay que diferenciar dos cosas: Una instancia no se abre ni se cierra; una instancia se inicia o se detiene. Por otro lado, la base de datos se monta y abre, o se desmonta y se cierra. Entendido este aspecto básico vamos a explicar como se arranca la base de datos y los procesos que intervienen.Existen 4 estados en los que la base puede estar en cualquier momento: SHUTDOWN, NOMOUNT, MOUNT y OPEN.

  • Cuando la base está en modo SHUTDOWN todos los archivos están cerrados y no existe instancia en memoria, es decir no hay instancia ni tampoco está abierta la base de datos.
  • Del estado SHUTDOWN la base pasa al estado NOMOUNT. En este estado la instancia es construida en memoria mediante la lectura del Parameter File. La lectura del Parameter File se la realiza en el siguiente orden: primero intenta leer el archivo dinámico SPFILE.ora, si no lo encuentra continúa con el SPFILE.ora y si no lo encuentra continúa con el archivo estático INIT.ora. (Estos archivos están en el directorio %ORACLE_HOME%\DATABASE\). En este estado Se crea la SGA y se inician los background processes, pero no se establece una conexión con la base de datos.
  • Del estado NOMOUNT la base pasa al estado MOUNT, mediante la lectura del Control File (En caso de tener algunos Control Files Multiplexados, se localizan y verifica que ninguna copia esté perdida y que todas sean iguales) de acuerdo a las especificaciones del Parameter File. . En este estado la base de datos es asociada a la instancia iniciada. Cuando el Control File es leído se obtiene los nombres y el status de de los Datafiles y de los Online Redo Log Files (Pero no se verifica su existencia)
  • Del estado MOUNT la base pasa al estado OPEN. En este estado se abre los Datafiles y los Online Redo Log Files (Oracle se asegura de tenerlos sincronizados; si no están sincronizados, la base permanece en estado Mount). Una vez abiertos estos archivos es posible establecer sesiones de usuario. En caso de que se encuentre algún error, el proceso SMON inicia Instance Recovery.

jueves, 18 de septiembre de 2008

Arquitectura de Oracle

Este artículo mostrará brevemente como es la arquitectura de un servidor Oracle.
Un servidor Oracle consiste de dos entidades: La instancia y la base de datos (independientes pero conectados). Durante el proceso de creación de una base de datos, se crea primero la instancia, y de ahí se crea la base de datos.

Una instancia de Oracle consta tiene estructuras de memoria estructuras de memoria y procesos; su existencia es pasajera ya que se halla en la RAM y el CPU, es decir, el tiempo de vida de la instancia durará mientras exista en memoria. Por otro lado, la base de datos consta de archivos físicos localizados en el disco duro, y una vez creada existirá indefinidamente (hasta que deliberadamente los archivos sean eliminados). Oracle define esta arquitectura para garantizar una abstracción e independencia entre las estructuras lógicas (que ven los programadores) de las estructuras físicas (que ven los administradores de sistemas); únicamente el DBA conoce las dos partes de la historia.

Instancia:
La instancia de Oracle consta de un área de memoria compartida conocida como SGA (System Global Area). Esta área de memoria consta de menos tres estructuras básicas:

  • Shared Pool: Incluye la Library Cache (área de memoria que almacena código recientemente ejecutado) y el Data Dictionary Cache (área que almacena las definiciones de objetos usados recientemente)
  • Database Buffer Cache: Área de trabajo para la ejecución de SQL
  • Log Buffer: Área que almacena todos los cambios que son realizados en el Database Buffer Cache

A parte de estas tres estructuras principales, también existen otras 3 que son opcionales:

  • Large Pool: Área utilizada para mejorar el rendimiento en servidores compartidos (multithreaded) o para procesos I/O de disco y cinta
  • Java Pool: Área utilizada si se tiene una aplicación que va a ejecutar procedimientos Java (ya que Oracle maneja sus APIs con Java muchos administradores consideran a esta área de memoria como obligatoria)
  • Streams Pool: Utilizado para manejo de Streams

A parte del SGA, la instancia de Oracle tiene 5 procesos conocidos como Background process:

  • SMON: Habilita la conexión entre la instancia y la base de datos. Permite la recuperación de la base de datos después de una falla
  • PMON: Se encarga de gestionar las sesiones de usuario. Cuando un proceso de usuario falla, se encarga de limpiar los procesos restantes
  • CKPT: Se asegura que la instancia esté sincronizada con la base de datos.
  • LGWR: Escribe todos los cambios a los datos que se realizaron en el Database Buffer Cache en los Redo Log Files del disco
  • DBWn: Escribe los bloques modificados desde el Database Buffer Cache a los archivos de disco

Base de datos:

La base de datos abarca las estructuras físicas que se encuentran en disco. Estos archivos se dividen en dos: Requeridos y Externos.
Entre los archivos requeridos están:

  • Control File: Almacena el status de las estructuras físicas de la base de datos.
  • Online Redo Log Files: Almacenan un registro de los cambios realizados a la base de datos mientras estos de van dando
  • Datafiles: Son el repositorio de la información

En cambio, los archivos externos son:

  • Parameter File: Define la instancia y los parámetros de inicialización. Hay de dos tipos Dinámico (binario, que no se puede ejecutar y se actualiza constantemente) y estático (que se lo puede editar mediante un editor ASCII y que solamente es leído una sola vez cuando la instancia se inicia.)
  • Password File: Archivo de sistema que almacena los nombres de usuario y contraseña (encriptadas) para poder autenticar a un usuario sin la necesidad del diccionario de datos.
  • Archive Log Files: Copias de los Online Redo Log Files llenos.