He activado innodb_flush_log_at_trx_commit = 2
y obtengo una velocidad de escritura muy rápida. Pero, ¿es seguro ser utilizado en el sitio web de producción?
Puede perder hasta un segundo de transacciones. El valor por defecto es 1, que ayuda a mantener InnoDB ACID Compliant.
Según la Documentación MySQL sobre innodb_flush_log_at_trx_commit
Si el valor de innodb_flush_log_at_trx_commit es 0, el buffer de log es se escribe en el archivo de registro una vez por segundo y la operación de volcado a disco en el fichero de registro, pero no se hace nada en una transacción. Cuando el valor es 1 (por defecto), el buffer de registro se escribe en el fichero de registro en cada confirmación de transacción y la operación en el archivo de registro. Cuando el valor es 2, el búfer de registro se escribe en el archivo en cada confirmación, pero no se realiza la operación de volcado a disco. Sin embargo, el en el fichero de registro tiene lugar una vez por segundo también cuando el valor de es 2. Tenga en cuenta que el vaciado una vez por segundo no está garantizado al 100%. por segundo no está 100% garantizado que ocurra cada segundo, debido a problemas de programación de procesos.
El valor por defecto de 1 es necesario para el cumplimiento completo de ACID. Usted puede conseguir un mejor rendimiento estableciendo un valor distinto de 1, pero entonces puede perder hasta un segundo de transacciones en un fallo. Con un valor de 0, cualquier caída del proceso mysqld puede borrar el último segundo de transacciones. de transacciones. Con un valor de 2, solo un fallo del sistema operativo o un corte de energía puede borrar el último segundo de transacciones. InnoDB's funciona independientemente del valor. ; Para obtener la mayor durabilidad y consistencia posibles en una replicación utilizando InnoDB con transacciones, utilice innodb_flush_log_at_trx_commit=1 y sync_binlog=1 en tu master servidor my.cnf. >
Precaución
Muchos sistemas operativos y algunos hardwares de disco engañan a la operación flush-to-disk operación. Ellos pueden decirle a mysqld que el flush ha tenido lugar, incluso aunque no haya sido así. Entonces la durabilidad de las transacciones no esta garantizada incluso con la configuración 1, y en el peor de los casos un corte de energía puede incluso corromper la base de datos InnoDB. El uso de una batería de respaldo en el controlador de disco SCSI o en el propio disco acelera el las descargas de archivos, y hace que la operación sea más segura. También puede probar a utilizar el comando Unix hdparm para desactivar la caché de escrituras de disco en cachés de hardware, o utilizar algún otro comando específico para el hardware proveedor.
Basado en esto, valores diferentes a 1 ponen a InnoDB en riesgo de perder 1 segundo de transacciones, o una transacción de commit de datos.
La documentación también dice usar sync_binlog=1
.
Según la Documentación MySQL sobre sync_binlog
Un valor de 1 es la opción más segura porque en el caso de un fallo usted se pierde como máximo una sentencia o transacción del registro binario. Sin embargo, también es la opción más lenta (a menos que el disco tenga una Sin embargo, también es la opción más lenta (a menos que el disco tenga una caché respaldada por batería, que hace que la sincronización sea muy rápida).
Su opción más segura es
[mysqld]
innodb_flush_log_at_trx_commit=1
sync_binlog=1
Si no te importa la posible pérdida de datos (hasta 1 segundo's de valor), entonces usted puede utilizar cualquiera de 0 o 2 a su propio riesgo si las recompensas (velocidad de escritura más rápida) vale la pena.
El innodb_flush_log_at_trx_commit
se utiliza con el propósito como ...
Si el valor de innodb_flush_log_at_trx_commit
es 0, el búfer de registro se escribe en el archivo de registro una vez por segundo y la operación de vaciado en disco se realiza en el archivo de registro, pero no se hace nada en una transacción confirmada.
Cuando el valor es 1 (por defecto), el búfer de registro se escribe en el archivo de registro en cada confirmación de transacción y la operación de volcado a disco se realiza en el archivo de registro.
Cuando el valor es 2, el búfer de registro se escribe en el archivo en cada confirmación, pero la operación de volcado a disco no se realiza en él. Sin embargo, el vaciado en el archivo de registro tiene lugar una vez por segundo también cuando el valor es 2. Tenga en cuenta que el vaciado una vez por segundo no está 100% garantizado que ocurra cada segundo, debido a problemas de programación de procesos.
El valor por defecto de 1 es necesario para el cumplimiento completo de ACID. Puede conseguir un mejor rendimiento estableciendo un valor diferente de 1, pero entonces puede perder hasta un segundo de transacciones en un fallo. Con un valor de 0, cualquier caída del proceso mysqld puede borrar el último segundo de transacciones. Con un valor de 2, sólo un fallo del sistema operativo o un corte de energía puede borrar el último segundo de transacciones. La recuperación de fallos de InnoDB'funciona independientemente del valor.
En mi opinión usar innodb_flush_log_at_trx_commit
a 2 no debería ser un problema, pero usar 1 es lo más seguro.
Mi opinión difiere de la de otros. innodb_flush_log_at_trx_commit = 0 si: es mi computadora de desarrollo o mini base de datos casera donde no hay datos sensibles.
innodb_flush_log_at_trx_commit = 2 si: es blog/estadisticas/comercio electronico (con ~100x compras al dia), etc.
innodb_flush_log_at_trx_commit = 1 si: tiene muchos clientes o necesita trabajar con transacciones de dinero como el banco. entonces esta vez debería dividir su flujo de datos entre varios servidores para tener velocidad & seguridad.
Yo prefiero 2, porque tiene ~75x velocidad de escritura más rápida y falla SÓLO si falla el hardware.
De todos modos usted debe saber lo que necesita más mucho más velocidad de escritura o hasta 1 segundo de información?