2009-07-22 17 views
9

El siguiente es mi archivo de configuración de producción predeterminado de MySQL (my.cnf) para una configuración UTF-8 pura con InnoDB como motor de almacenamiento predeterminado.Configuración óptima de MySQL (my.cnf)

[server] 
bind-address=127.0.0.1 
innodb_file_per_table 
default-character-set=utf8 
default-storage-engine=innodb 

La configuración realiza lo siguiente:

  1. se une a localhost: 3306 (loopback) en lugar del defecto *: 3306 (todas las interfaces). Hecho para aumentar la seguridad.
  2. Configura un espacio de tabla por tabla. Hecho para aumentar la capacidad de mantenimiento.
  3. Establece el juego de caracteres predeterminado en UTF-8. Hecho para permitir una fácil internacionalización por defecto.
  4. Establece el motor de almacenamiento predeterminado en InnoDB. Hecho para permitir el bloqueo de nivel de fila por defecto.

Supongamos que puede mejorar aún más la configuración agregando un máximo de tres (3) parámetros de configuración. ¿Qué agregarías y por qué?

Una mejora en este contexto significa una mejora del rendimiento, una mejora de la fiabilidad o un aumento de la facilidad de uso/facilidad de mantenimiento. Puede suponer que la máquina que ejecuta la instancia de MySQL tendrá 1000 MB de RAM.

+0

Al menos con MySQL 5.5, considere cambiar el conjunto de caracteres predeterminado -> character_set_server – Touko

Respuesta

5

para almacenar en caché los datos más:

innodb_buffer_pool_size = 512M 

Si se escribe un montón de datos:

innodb_log_file_size = 128M 

, para evitar el exceso de conmutación de registro.

No hay un tercero que agregue en cualquier caso, todos los demás dependen.

0

Aumentar el tamaño de la memoria innodb, tan grande como el que prácticamente se puede hacer:

innodb_buffer_pool_size=768M 

También querrá algún espacio de almacenamiento intermedio clave para tablas temporales:

key_buffer_size=32M 

Otros dependería en lo que estás haciendo con la base de datos, pero table_cache o query_cache_size serían un par de otros potenciales.

+0

¿No es relevante 'key_buffer_size' para' MyISAM' solamente? – Quassnoi

+0

@Quassnoi - lo es, pero creo que MySQL siempre usará MyISAM para las tablas temporales, por lo que aún necesita un espacio de memoria intermedia clave para eso (al menos esto es lo que escuché). Sin embargo, podría estar equivocado en eso. –

1

La asignación de más memoria que el valor predeterminado de 8M a InnoDB (usando innodb_buffer_pool_size) es sin duda una mejora. En cuanto al valor, en un servidor de base de datos dedicado como el suyo puede configurarlo hasta el 80% de su RAM y cuanto más alto establezca este valor, menores serán las interacciones con el disco duro. Sólo para dar mi granito de arena, me gustaría mencionar que usted puede tener algo de mejora en el rendimiento ajustando el valor de innodb_flush_log_at_trx_commit, sin embargo sacrificar el cumplimiento ÁCIDO ... De acuerdo con la MySQL manual:

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 en el disco se realiza en el archivo de registro , pero no se hace nada en un compromiso de transacción .

Por lo que puede perder algunos datos que no se escribieron correctamente en la base de datos debido a un bloqueo o un mal funcionamiento. Siempre según el manual de MySQL:

Sin embargo, la recuperación de bloqueo de InnoDB es no se ve afectada y por lo tanto la recuperación de bloqueo no funciona independientemente del valor.

Por lo tanto, sugeriría:

innodb_flush_log_at_trx_commit = 0 

Por último, si usted tiene un alto índice de conexión (es decir, si es necesario configurar MySQL para soportar una aplicación web que accede a la base de datos), entonces debería considerar el aumento la cantidad máxima de conexiones a algo así como 500. Pero como esto es algo más o menos trivial y conocido, me gustaría destacar la importancia de back_log para garantizar la conectividad.

Espero que esta información lo ayude a optimizar su servidor de base de datos.

Cuestiones relacionadas