MySQL tuning parámetros para cualquier motor

Muchas gente realiza instalaciones MySQL y no se preocupan de la parametrización. La parametrización es importantísima, una BD puede funcionar bien (de momento) con los parámetros por defecto, los problemas aparecen cuando la BD crece o aumenta su carga de trabajo.

En esta entrada trataremos los parámetros que pueden afectar al rendimiento de cualquier motor (los más usados son INNODB y MyISAM).

Las variables son usadas por el servidor para dimensionar estructuras de memoria cruciales para el buen rendimiento del motor de BD, los estados del servidor nos indicarán si las variables que hemos definido realmente están causando algún efecto positivo o por el contrario no sirven para absolutamente nada.

En la entrada “Variables y estados en MySQL” ya se trató el tema de las variables y estados del servidor, pero repasando rápidamente, para ver el valor de una variable (valor global no de sesión):

Source   
mysql> SHOW global VARIABLES LIKE 'table_open_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 400   |
+------------------+-------+
1 row IN SET (0.00 sec)

Si omitimos el like muestra todas las variables. Podemos modificar el valor de una variable con:

Source   
SET global table_open_cache=600;

Para conocer un estado del servidor:

Source   
mysql> SHOW global STATUS LIKE 'Uptime';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 194   |
+---------------+-------+
1 row IN SET (0.00 sec)

Podemos cambiar el valor de una variable pero no un estado del servidor. Los cambios es los valores de una variable de forma dinámica son púramente experimentales, si queremos que un cambio sea persistente tenemos que añadir el correspondiente parámetro en el fichero my.cnf.

La documentación de todos las variables (y sus correspondientes parámetros para el fichero my.cnf) la podemos encontrar en:
http://dev.mysql.com/doc/refman/5.5/en/dynamic-system-variables.html

Y para los estados en:
http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html

Vamos a tratar el tema a partir de los estados del servidor y veremos como podemos mejorar esos estados modificando variables.

Estados o relaciones que afectan a cualquier motor:

  • Opened_tables, si este valor es muy alto o aumenta rápidamente (y nada está haciendo FLUSH TABLES) es posible que tengamos que incrementar el valor de la variable:

table_open_cache, indica en número de tablas que se pueden tener abiertas en cache.

  • Created_tmp_disk_tables/Created_tmp_tables => ideal 0, los estados utilizados en la relación muestran las tablas temporales creadas en disco y en total de tablas temporales, respectivamente. Si la relación se aleja del ideal debemos incrementar la variable:

tmp_table_size, Tamaño máximo de tablas temporales en memoria.

  • Sort_merge_passes, índica el número de pasadas de tipo “merge” que ha tenido que realizar el algoritmo de ordenación. Si el valor aumenta rápidamente en el tiempo necesitamos aumentar la variable:

sort_buffer_size, buffer de ordenación por sesión.

  • Qcache_free_blocks*100/Qcache_total_blocks, solo si tenemos activada la cache de resultados (variable query_cache_size>0), porcentaje de ocupación del caché de resultados. Si tenemos un 100% debemos aumentar la variable:

query_cache_size, cantidad de memoria para cache de resultados.

  • Qcache_lowmem_prunes, solo si tenemos activada la cache de resultados (variable query_cache_size>0), indica el número de consultas que se ha desalojado del cache por memoria insuficiente, debemos aumentar la varaible:

query_cache_size, cantidad de memoria para cache de resultados.

  • Threads_created*100/Connections, está relación indica el % de fallos de cache en la creación de threads, si el valor es alto se ha de incrementar la variable:

thread_cache_size, que indica cuantos threads ha de mantener el servidor para ser reusados como cache.

Lo que se ha tratado en esta entrada es indiferente del motor que usen las tablas de las BDs, en próximas entradas trataré el tuning para INNODB y MyISAM. Pero en cualquier caso se ha descrito una tarea común de tuning, que ha de ser realizada además de las específicas del motor que usemos.

Espero os sea de utilidad…

One thought on “MySQL tuning parámetros para cualquier motor

  1. Pingback: MySQL, tuning de parámetros para el motor INNODB | Administrando sistemas

Deja un comentario