Para realizar un tuning de MySQL, antes hay que familiarizarse con un par de conceptos, MySQL tiene VARIABLES y ESTADOS:
- Una variable tiene asociado un valor que puede ser fijado en el fichero my.cnf (my.ini en Windows) o símplemente se ha fijado uno por defecto de forma implícita, aunque también es posible modificar algunas variables en tiempo de ejecución (atención que no queda reflejado el cambio en los ficheros de configuración). Según la versión de que estemos usando podemos tener más de 300 (como ocurre con la versión 5.5). Es posible conocer el valor de todas las variables con:
mysql> SHOW VARIABLES;
O el valor de una concreta con:
mysql> SHOW VARIABLES LIKE 'version';
+---------------+-----------------------+
| Variable_name | Value |
+---------------+-----------------------+
| version | 5.5.18 |
+---------------+-----------------------+
1 row IN SET (0.00 sec)
- Un estado es por ejemplo el número el número de segundos que el servidor está arrancado, el número de estados también es dependiente de la versión más de 300 para la vesión 5.5. El acceso a los estados se realiza de forma similar a las variables:
mysql> SHOW STATUS LIKE 'Uptime';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Uptime | 1529023 |
+---------------+---------+
1 row IN SET (0.00 sec)
Más información sobre la sintaxis en: http://dev.mysql.com/doc/refman/5.5/en/show-status.html
Documentación de estados en: http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html
Hay que tener en cuenta que tanto las variables como los estados pueden ser de ámbito global o de sesión, se puede consultar un estado o una variable a nivel global con:
mysql> SHOW global VARIABLES;
mysql> SHOW global STATUS;
Es muy recomendable una lectura de todos los estados, aunque sea rápida, y de todas las variables. Se puede encontrar relaciones muy interesantes entre las varaibles y los estados, para por ejemplo ver si tenemos bien dimensionado un buffer.
Esto será en otra entrada…
Pingback: MySQL, tuning de parámetros para cualquier motor | Administrando sistemas
Pingback: MySQL, tuning de parámetros para el motor INNODB | Administrando sistemas
Respondiendo a la pregunta de un lector:
Entiendo que estás trabajando con tablas MyISAM, en este caso las variables de sistema:
key_buffer_size, es el buffer usado por los bloques de índices y es compartido por todos los threads.
read_buffer_size, es un buffer usado por cada thread en las lecturas de tablas secuenciales, por defecto 128K.
thread_cache_size, el tamaño de caché para threads. Si fijamos 10 por ejemplo significa que tendremos 10 threads esperando un cliente, si se usan las 10 se crearán nuevos threads a demanda (con su correspondiente coste para el SO).
Podemos sacar algunas conclusiones:
1-Determinar si el thread_cache_size es suficientemente grande según la fórmula que indica los aciertos (según las variables de estado):
hits=1-Threads_created/Connections
2-Si tenemos un número de hits cercano al 100% podemos determinar que:
memoria necesaria = read_buffer_size*thread_cache_size