Las palabras inglesas “forced writes” significan: escrituras forzadas, o sea escrituras obligatorias, que se escriben sí o sí.

Forced writes puede tener dos valores ON (también llamado sync) o OFF (también llamado async).

Las operaciones de escritura en Firebird son las siguientes: INSERT, UPDATE, DELETE

Cualquiera de esas tres operaciones (realizada en forma exitosa, desde luego) cambia el contenido de una tabla (agregándole filas, actualizando filas, o borrando filas) y por lo tanto también cambia el contenido de la Base de Datos.

¿Y para qué se usa “forced writes”?

Si el valor está en ON entonces inmediatamente al ejecutar un COMMIT exitoso la operación se escribe en el disco duro y la Base de Datos queda correctamente actualizada.

Si el valor está en OFF entonces al ejecutar un COMMIT exitoso los datos se guardan en una memoria caché, o sea en una porción de la memoria RAM. No se guardan en el disco duro sino en la memoria RAM y más adelante cuando el caché se llena o cuando se detiene el Servidor del Firebird son escritos en el disco duro, por lo tanto pueden estar mucho tiempo (incluso días) en la memoria RAM.

Ventajas y desventajas de usar ON u OFF

Cuando “forced writes” está en ON los datos se guardan en el disco duro y por lo tanto ya están bien seguros ahí. Pero escribir los datos en el disco duro es mucho más lento que escribirlos en la memoria RAM.

Entonces, si lo que buscamos es velocidad, que “forced writes” esté en OFF es lo mejor, sobre todo si los datos que se escriben son muchos.

Pero escribirlos en RAM tiene un gran problema potencial y es que si se corta la energía eléctrica todo el contenido de la RAM desaparece, se volatiliza, y se pierde completamente. Como la Base de Datos creía que esos datos ya estaban guardados en ella siendo que no era así porque estaban en un caché en RAM eso puede provocar corrupción en ella, es decir podría corromperse la Base de Datos con todos los grandes dolores de cabeza que tal hecho provocará.

Inclusive tener una UPS (energía de potencia ininterrumpida) no nos otorga una seguridad del 100% porque el aparatejo podría estar fallando. O podría descomponerse y quedarse sin carga en un momento en que nadie está cerca para detectarlo (por ejemplo, durante un fin de semana).

Resumiendo:

Con “forced writes” en ON se gana en SEGURIDAD, porque todos los datos se escriben sí o sí en la Base de Datos y ésta no puede corromperse.

Con “forced writes” en OFF se gana en VELOCIDAD, porque los datos se escriben en la memoria RAM que es muchísimo más rápido que escribirlos en el disco duro pero existe el riesgo de que un corte en la energía eléctrica (o un fallo en el hardware del Servidor) haga que se pierda todo lo que estaba en la memoria RAM y que además se corrompa la Base de Datos. Este problema es mucho mayor en Windows que en Linux porque el Windows es muy perezozo para escribir lo que está en la memoria caché en el disco duro, inclusive pueden pasar varios días hasta que lo haga (desde luego se supone que no se apagó la computadora en todo ese tiempo).

Recomendación:

Para el trabajo del día a día, para lo que los usuarios hacen normalmente, dejar “forced writes” en ON, con muchísima mayor razón si el Sistema Operativo de la computadora donde está instalado el Servidor es un Windows.

Para tareas esporádicas de ingreso masivo de datos (por ejemplo, para migrar todo el contenido de tablas .DBF en tablas de Firebird) poner “forced writes” en OFF y apenas la migración terminó exitosamente volver a colocar “forced writes” en ON. De esta manera conseguiremos que la velocidad de la migración sea rapidísima.

Para ver el valor actual de “forced writes”

Si quieres conocer cual valor de “forced writes” tiene actualmente una Base de Datos entonces puedes ejecutar el programa GSTAT con el parámetro -h, como se ve a continuación:

FORCED1

Captura 1. Si haces clic en la imagen la verás más grande

La flecha (1) te muestra el alias de la Base de Datos, mientras que la flecha (2) te indica que esta Base de Datos tiene “forced writes” en ON (o sea, habilitado), en otras palabras, que todas las operaciones de escritura se escribirán inmediatamente y sin esperas en el disco duro apenas finalice la transacción con un COMMIT exitoso.

Cambiando el valor de “forced writes”

Para cambiar el valor de “forced writes” debemos abrir una ventanita “símbolo del sistema”, ubicarnos en la carpeta \BIN de nuestra instalación del Firebird y escribir:

Para ponerlo en ON:

GFIX -write sync -user SYSDBA -password masterkey

Para ponerlo en OFF:

GFIX -write async -user SYSDBA -password masterkey

FORCED2

Captura 2. Si haces clic en la imagen la verás más grande

Como la flecha te indica aquí lo que se quiere es poner “forced writes” en ON (es decir: en sync), o sea que las operaciones de escritura se ejecuten inmediatamente. Eso es lo correcto durante el uso normal de la Base de Datos, y con mayor razón en Windows. Solamente durante muy cortos períodos de tiempo (por ejemplo mientras se están insertando masivamente datos) debería estar en OFF (es decir: en async).

Artículo relacionado:

El índice del blog Firebird21

 

Anuncios