Esto está relacionado con esta pregunta . Ayuda a obtener un mejor rendimiento para las tablas InnoDB.
Según el manual de MySQL , innodb_flush_log_at_trx_commit
es una variable dinámica global. Por lo tanto, puedo cambiarlo usando el comando SET GLOBAL y parece estar funcionando.
mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2;
Query OK, 0 rows affected
mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2 |
+--------------------------------+-------+
1 row in set
Pero no modificó la configuración real de MySQL. Cuando actualicé my.cnf y reinicié el servidor MySQL, funcionó. Entonces, ¿no puedo cambiar la variable global en tiempo de ejecución?
Prefiero el valor predeterminado innodb_flush_log_at_trx_commit=1
, pero necesito cambiarlo a 2 antes de ejecutar un proceso de restauración para que una base de datos grande sea más rápida. Pero cuando finalice el proceso, quiero volver a cambiar el valor a 1. ¿Es posible hacer esto en tiempo de ejecución?
No tengo acceso a my.cnf en mi servidor de alojamiento compartido.
fuente
SET GLOBAL max_connections = 1000;
y cuando corroSHOW VARIABLES LIKE 'max_connections';
para ver el valor anterior me volvería loco hasta que cierre la sesión y vuelva a iniciarla. +1 para este punto de vista que se da por sentado y a menudo se olvida.connect
es realmente nuevo para mí en MySQL. Lo he hecho un millón de veces en PostgreSQL y Oracle. Nunca pensé que MySQL lo permitieraconnect
). Con el valor 2, la importación de 2.241.319 registros tomó 27 minutos y 43 segundos, mientras que tardó aproximadamente 1 días con el valor 1. La configuración parece estar funcionando en la sesión actual, pero restableció la configuración original (desdemy.cnf
) después del reinicio.innodb_flush_log_at_trx_commit
? ¿O es que para todas las configuraciones, la configuración deglobal
no afectaría la sesión actual?Al configurar innodb_flush_log_at_trx_commit , corre el riesgo de confusión con la interoperabilidad mysqld / OS. Digo esto porque se confía en el sistema operativo para realizar el vaciado.
Tenga en cuenta la precaución de la documentación de MySQL
Lo que esto dice es lo siguiente: el sistema operativo puede mentir como un marido infiel. El sistema operativo dice que vaciará al disco y simplemente no lo hace. Por lo tanto, incluso si configura innodb_flush_log_at_trx_commit, debe divorciar la descarga del sistema operativo en el disco de la descarga de mysqld en el disco.
Intente establecer innodb_flush_method en O_DIRECT si aún no lo ha hecho. Es posible que vea una diferencia porque el método flush es muy diferente (vea mi aclaración
Mar 04, 2011
posterior a la variable innodb_flush_method de MySQL ).CONSIDERACIÓN
Como mencionó, no tiene acceso a
my.cnf
. Póngase en contacto con SysAdmin en su proveedor y cambie innodb_flush_method .ACTUALIZACIÓN 2012-12-10 12:45 EDT
Actualmente estoy ejecutando MySQL 5.5.12 en mi PC. Cuando me conecto y corro
show variables like 'innodb_flush_method';
me saleComo está en blanco, solo indica que se utiliza la configuración predeterminada. Lea mi publicación del 04 de marzo de 2011 para obtener una aclaración sobre MySQL innodb_flush_method variable
fuente
innodb_flush_method
enmy.ini
(nomy.cnf
). Información del servidor - Apache 2.4.1, PHP 5.4.4, MySQL 5.5innodb_flush_method
configuración ySHOW VARIABLES
no lo muestra.my.ini
omy.cnf
y no es una variable dinámica, no estoy seguro de cómo puedo configurarlo.