Optimización de rendimiento en tablas MyISAM

En alguna otra entrada ya he comentado que InnoDB debería ser el motor que utilicemos en la gran mayoría de casos, pues tiene muchas ventajas sobre otros motores como MyISAM. No obstante, en algunos casos debemos mantener tablas con MyISAM por razones de rendimiento.

Si se da esta situación, nos interesa optimizar MySQL al máximo para ofrecer el mejor rendimiento sobre estas tablas. Lamentablemente, MyISAM no permite (al contrario que InnoDB) realizar caché o buffer de los datos de las tablas, por lo que las posibilidades de optimización de estas tablas son muy limitadas. Aún así, voy a explicarlos las dos posibles optimizaciones posibles.

key_buffer_size

Este valor es el más importante en cuanto a la optimización de tablas MyISAM, y es que el único “dato” que podemos cachear en tablas MyISAM son los índices, por lo que nos interesa cachear los mismos estableciendo un valor de key_buffer_size apropiado.

¿Cómo calcular el valor apropiado?  Con el siguiente comando:

Este comando nos calculará el tamaño total de los indices de las tablas MyISAM y nos devolverá el key_buffer_size recomendado:

read_buffer_size y read_rnd_buffer_size

Si bien en MyISAM no es posible cachear datos a nivel global, si es posible establecer una caché de los mismos para cada conexión que se establece contra MySQL. Los parámetros read_buffer_size y read_rnd_buffer_size nos permiten establecer el tamaño de esta caché. Hay que tener cuidado con que valores establecemos pues podemos obtener el resultado opuesto al esperado, pero si establecemos un valor correcto podemos maximizar mucho la velocidad en las consultas sobre nuestras tablas MyISAM, sobretodo si debemos realizar un full-scan.

¿Cómo obtener un valor correcto? Pues realizando pruebas, concretamente, realizando queries que fuercen un full-scan de la tabla.
Un buen valor para empezar son, por ejemplo, 32K (Siempre múltiplos de 4K), y cuidado con sobredimensionar estos parámetros, pues puede dar peor rendimiento

 

Deja un comentario

Tu email nunca se publicará.