MySQL permite registrar en un fichero de texto todas aquellas query's que tardan mucho en ejecutarse, lo que generalmente hacer que nuestras aplicaciones vayas más lentas. Una vez las tengamos archivadas, con la información que nos proporciona dicho log, podemos tomar medidas correctivas para evitar que sean tan pesadas. Para activar el log's de las slow query's tenemos que añadir en el fichero de configuración (/etc/my.cfg) del servidor lo siguiente,
log-queries-not-using-indexes log-slow-queries = /var/log/mysql/slow_querys.log long_query_time = 10Donde,
- log-slow-queries contiene el path completo al fichero.
- long_query_time es el tiempo, en segundo, para considerar una slow query.
- log-queries-not-using-indexes, le indica al servidor MySQL que envíe a dicho log todas aquellas query's que no usen índices.
Una vez tengamos los cambios aplicados, reiniciamos el servidor MySQL
shell> /etc/init.d/mysql restarty comprobamos que las slow query's están activadas.
mysql> show variables like '%slow%'; ... | log_slow_queries | ON | | slow_query_log_file | /var/log/mysql/slow_querys.log | ...Una vez tenemos esta facility activada, cualquier consulta a MySQL que sea considera lenta, irá al fichero anteriormente indicado y gracias al comando mysqldumpslow podremos examinarlo detenidamente, para así ver cómo poder optimizarla y que no ralentice las peticiones de la aplicación.
shell> mysqldumpslow -t 10 /var/log/mysql/slow_querys.log # Time: 111003 17:14:49 # User@Host: zbx[zbx] @ web.domain.com [192.168.1.83] # Thread_id: 40302 Schema: zbx Last_errno: 0 Killed: 0 # Query_time: 3049.402685 Lock_time: 0.000205 Rows_sent: 0 Rows_examined: 1468256894 Rows_affected: 0 Rows_read: 0 # Bytes_sent: 44 Tmp_tables: 2 Tmp_disk_tables: 0 Tmp_table_sizes: 120 # InnoDB_trx_id: 451B1F use zbx; SET timestamp=1317654889; SELECT DISTINCT g.* FROM groups g,hosts_groups hg,hosts h WHERE ((g.groupid...Si esta entrada te parece interesante, quizás también te interese MySQL, rotado de slow logs.
No hay comentarios :
Publicar un comentario