Bienvenidos sean a este post, hoy veremos a este log muy particular.
Este log, usualmente denominado log lento, es utilizado para almacenar todas las ejecuciones que toman demasiado tiempo, para activarlo/desactivarlo se debe utilizar la siguiente opcion:
--slow-query-log[=valor]
En caso de no informar ningun valor se activa la opcion, si pasamos el valor de 1 tambien se activa el log y si pasamos el valor de 0 se desactiva, pero esta tambien posee una variable dinamica llamada slow_query_log que podemos activar o desactivar con los mismos valores antes comentados, el nombre predeterminado del archivo es el nombre del host seguido del sufijo -slow.log, al igual que los otros logs se puede usar un archivo, una tabla o ambos, al igual cuando hablamos sobre el log general en este post este tambien define como sera su salida, entre un archivo(FILE), una tabla (TABLE) o ninguna (NONE), aunque aqui se nos permite una combinacion entre estos valores siempre y cuando sean separados por una coma, en caso de usar NONE anulara al resto, al igual que los otros logs podemos variar el archivo de salida ya sea por medio de la variable slow_query_log_file o por medio de la opcion –slow-query-log-file, al igual que hablamos anteriormente en entornos de replicacion siempre es recomendable utilizar el mismo nombre de archivo (y no el de cada host) para una rapida identificacion de los mismos, por ultimo la tabla donde se escribe se llama slow_log y se encuentra en la base mysql.
Este log a su vez dispone de varias reglas que nos ayudan a establecer como el log determina que esta corriendo lento y debe ser agregado al log, veamos algunas:
- log_queries_not_using_indexes, variable de tipo dinamica, se usa para agregar los queries que no utilicen indices en su busqueda, con el valor 1 se activa, con el valor 0 se desactiva, este ultimo es su valor predeterminado, tambien se lo puede invocar desde el inicio con –log-queries-not-using-indexes.
- long_query_time, variable de tipo dinamica, evalua todo tipo de queries (inclusive con indices), esta medida en segundos, si se indica 0 significa que no agregara nada al log, cualquier valor informado servira como referencia para que mida el tiempo en que se bloquea la base y hasta que se libera la misma, si se excede se agrega al log, se puede invocar al inicio con –long-query-time.
- log_slow_filter, es una variable con multiples valores separados con comas para poder establecer que tipo de eventualidades se deben agregar al log, mas adelante hablaremos sobre las opciones disponibles
- min_examined_row_limit, establece cual debe ser el valor minimo de lineas a examinar por query, en caso de no cumplirse no lo agrega al log, si se establece el valor de 0 todos los queries pasan al log
- log_throttle_queries_not_using_indexes, este limita la cantidad de queries sin indices que se agregaran al log por minuto, el valor predeterminado es 0 y no establece limite pero lo hace con cualquier valor mayor a este
- log_slow_admin_statements, variables de tipo dinamica, establece si las tareas administrativas CHECK TABLE y ANALIZE TABLE se escriben en el log de queries lentos, con el valor de 1 se activa, y su valor predeterminado es 0
- log_slow_slave_statements, habilita a los esclavos en un entorno de replicacion a escribir en este log, normalmente no lo hacen porque el amo es el que escribe en este
- –log-short-format, opcion para el inicio que establece una descripcion corta del log, no tiene variable dinamica y tambien afecta al log binario
- log_slow_verbosity, variable de tipo dinamica que nos permite agregar mas descripcion al log, se puede usar la opcion –log-slow-verbosity al inicio
Estas son algunas de las variables u opciones que podemos utilizar para nuestro log pero a su vez un par de estas poseen sus propios valores, veamos el caso de log_slow_filter:
- full_scan, indica que debe hacer un chequeo completo de la tabla
- full_join, indica que debe almacenar la tabla donde se efectuo un join sin indices
- filesort, indica que debe almacenar la tabla que realizo una operacion de orden, la cual requiere una tabla de memoria temporal
- filesort_on_disk, idem al anterior pero esta vez con un archivo temporal en disco
- tmp_table, se usa para almacenar un query donde la tabla crea una tabla temporal implicita
- tmp_table_on_disk, idem al anterior pero si escribe la tabla temporal en el disco
- query_cache_miss, este indica que se efectuo un query pero el mismo no fue encontrado en el cache de queries
La otra variable que posee valores es log_slow_verbosity, veamos el detalle:
- microtime, significa que la variable usa precision tiempo Unix
- query_plan, indica que se almacene informacion del plan de ejecucion del query
- innodb, indica que se almacene las estadisticas de innodb
- profiling, habilita los perfiles de queries
- profiling_use_getusage, indica que se almacena el uso de la funcion getusage
- explain, indica que debe mostrar la salida del comando EXPLAIN
Con esto tenemos completo todas las opciones que disponemos para trabajar sobre nuestro log de queries lentos, donde podemos decir que las variables u opciones encargadas de escribir en el log son:
- log_queries_not_using_indexes
- log_throttle_queries_not_using_indexes
- long_query_time
- log_slow_filter
Las encargadas de filtrar las anterior son:
- min_examined_row_limit
- log_slow_admin_statements
Por ultimo estas seran las encargadas que informacion se agrega al log:
- log-short-format
- log_slow_verbosity
En resumen, hoy hemos hablado sobre el log de query lentos, como es, para que nos sirve, como se habilita, las distintas opciones que disponemos para filtrar el mismo, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
