MySQL consume 300% de CPU

Iniciado por ccrunch, 1 Diciembre 2014, 18:36 PM

0 Miembros y 1 Visitante están viendo este tema.

ccrunch

Hola a todos, los que lean este tema y ya me conozcan (porque ya pregunté algo de optimización de MySQL) se van a cagar de risa pero bueno  :xD

A ver, tengo un servidor con una web y estoy viendo en los procesos del TOP que consume 300%. Yo la verdad es que me encargo de mantenerlo, tanto apache, como servidor correo, MySQL, cron, scripts, etc, pero es que esto no tengo ni idea de qué pasa :xD

Me podéis dar consejos sobre cómo intentar ver cuál es el problema? En google vi un script que te dice más o menos qué hay que modificar, pero quisiera algo más... creíble  :xD

Me podéis ayudar?

Salu2 y gracias a todos!

el-brujo

Lo primero que tienes que saber es las QPS (Queries per second, consultas por segundo) del servidor MySQL. El tamaño de la bases de datos y las consultas lentas.

Existen varios scripts para modificar las variables de MySQL (query caché, etc).

MySQL Tuning Primer
MySQLTuner
mysqlreport

Herramientas para Optimizar MySQL
http://foro.elhacker.net/tutoriales_documentacion/herramientas_para_optimizar_mysql-t214396.0.html

MySQL a fondo (Optimización my.cnf, MyISAM vs InnoDB)
http://blog.elhacker.net/2012/05/mysql-fondo-optimizacion-mycnf-myisam.html

ccrunch

Muchas gracias, como siempre ayudando a los demás  :)

Le echaré muchos vistazos, porque me hace falta  :xD

Gracias de nuevo.

6666

Estas solicitando consultas a varios registros a la vez de gran tamaño u solicitando una funcion mysql de uso general cientos de veces, como es math() . revisa todas las propiedades de la tabla y bases, igualmente para las consultas de busqueda.

ccrunch

Hola a todos, he conseguido un pequeño copia/pega de información de la BD: http://pastebin.com/VWQCrhLs

Salu2

moikano→@

El mismo mysql te puede hechar una mano para saber que consultan cuestan mas. En el fichero /etc/my.conf puedes añadir estas dos líneas.

long_query_time=1
log-slow-queries=/var/log/mysql/log-slow-queries.log

La consultas que cuesten mas de un segundo se guardarán en ese log.

También puedes hacer lo siguiente por consola de mysql para saber que procesos hay y cuales se quedan colgados y cuanto tiempo llevan.
SHOW PROCESSLIST;

Si lo quieres ver como un htop puedes ejecutar este comando para ver lo mismo que el show pero en tiempo real y con mas datos. Este comando directamente por consola bash.
mytop --prompt -u root

Suerte.

ccrunch

La info del mysql me da esto:
Uptime: 1323861  Threads: 7  Questions: 108110567  [b]Slow queries: 11816[/b]  Opens: 133651  Flush tables: 1  Open tables: 64  [b]Queries per second avg: 81.663[/b]


Eso en negrita por lo visto está un poco mal, cómo puedo detectar esas consultas?
He creado el log para las slow-queries y el fichero de momento está vacío, aunque haya hecho esto:
Citarmkdir /var/log/mysql
touch /var/log/mysql/log-slow-queries.log
chown mysql.mysql -R /var/log/mysql

Salu2

el-brujo

81 consultas por segundo no está nada mal, me refiero que son bastantes consultas por segundo.

Parece que tienes muchas slow queries. Se guardará la consulta en el fichero log-slow-queries.log que duren más de un segundo (long_query_time=1)

Y estás usando el motor InnoDB

Copia y pega el contenido del fichero my.cnf para ver la configuración que estás usando.

¿Qué versión de MySQL estás usando? Me refiero a la rama 5.5?

moikano→@

CitarHe creado el log para las slow-queries y el fichero de momento está vacío, aunque haya hecho esto:
Has probado a reiniciar mysql? si no no  lo creará

ccrunch

#9
Citar[mysqld]
bind-address=127.0.0.1
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

ft_min_word_len = 1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#queries lentas
long_query_time=1
log-slow-queries=/var/log/mysql/log-slow-queries.log
CitarHas probado a reiniciar mysql? si no no  lo creará
Lo sé pero como hay consultas y escrituras en la BD es por miedo a que se corrompa.

Salu2 a los dos y gracias!