Nvidal’s Blog

Just another WordPress.com weblog

Comportamiento de los redos y la sentencia Commit

Cuando una transacción es actualizada, una entrada al redo log correspondiente al update es registrada. Oracle registra este redo en un buffer de memoria hasta que se complete la transacción. Cuando el commit es ejecutado, el proceso log writer (LGWR) escribe redo del commit, junto con los redos acumulados de todos los cambios en la transacción, a disco. Por defecto la base de datos oracle escribe todo los redo a disco. Este comportamiento introduce una latencia en el commit porque la aplicación debe esperar que el redo sea registrado en el disco.

Suponiendo que estés escribiendo una aplicación que requiera procesar una gran cantidad de transacciones. Si deseas manejar el comportamiento del commit por poca latencia, tienes que cambiar la opción por defecto del COMMIT para que la aplicación no tenga la necesidad de esperar porque la base de datos oracle escriba en los redo log.

La base de datos oracle cambia el manejo del commit dependiendo la necesidad de la aplicación. Puedes cambiar el comportamiento del commit de la siguiente forma:

■ COMMIT_WRITE initialization parameter at the system or session level
■ COMMIT statement

La sentencia COMMIT sobre escribe el valor actual del parámetro de inicialización.

Para establecer las opciones de commit y cambiar su comportamiento se puede hacer utilizando el parámetro de inicialización COMMIT_WRITE con los siguientes valores:

WAIT: El commit no retorna satisfactorio hasta que el correspondiente redo del commit sea registrado en el online redo logs, este es el valor por defecto.

NOWAIT: El commit debe retornar a la aplicación sin esperar que el redo a ser escrito sea registrado en el online redo logs.

IMMEDIATE: El proceso log writer debe escribir el redo del commit inmediatamente, este es el default. Esta opción fuerza a realizar operación de I/O en el disco.

BATCH: La base de datos oracle hace un buffer del redo. EL proceso de log writer permite escribir el redo a disco en su propio momento.
Ejemplos de cómo definir el comportamiento del COMMIT usando el parámetro de inicialización y/o ALTER SYSTEM o ALTER SESSION

COMMIT_WRITE
Es un parámetro avanzado usado para controlar como las transacciones commit serán escritas a los redo logs. IMMEDIATE y BATCH controlan como los redos serán manejados por el log writer. El WAIT y NOWAIT controlan cuando el redo del commit es vaciado en el redo logs.

COMMIT_WRITE = IMMEDIATE, WAIT (Default)
COMMIT_WRITE = IMMEDIATE, NOWAIT
COMMIT_WRITE = BATCH, NOWAIT
COMMIT_WRITE = BATCH, WAIT

Con ALTER:
ALTER SYSTEM SET COMMIT_WRITE = BATCH, NOWAIT
ALTER SYSTEM SET COMMIT_WRITE = BATCH, NOWAIT

También puedes utilizarlo a nivel de la aplicación con las siguientes opciones:
COMMIT WRITE BATCH NOWAIT
COMMIT WRITE BATCH WAIT
COMMIT WRITE IMMEDIATE NOWAIT (Default)
COMMIT WRITE IMMEDIATE WAIT

Si solamente IMMEDIATE o BATCH es especificado, sin WAIT o NOWAIT, WAIT es asumido.
Si solamente WAIT o NOWAIT es especificado, sin IMMEDIATE o BATCH, IMMEDIATE es asumido.

septiembre 28, 2009 - Posted by | Database, Developer, Oracle

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: