Thread Mysql comendo toda a CPU

1

Eu tenho um problema com o servidor MySQL. Algum thread mysql por algumas horas comendo todo o processador. Matar o processo certamente ajuda, mas como é possível rastrear que o código está sendo executado internamente?

Meu topo atual:

 PID USER     PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+     IO Command                                                                                                             
 1353 mysql     20   0  340M 70004  7652 S 31.0  1.1  1h34:28     0 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket
 4344 mysql     20   0  340M 70004  7652 S 3.0  1.1  5:17.75     0 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket
 5870 mysql     20   0  340M 70004  7652 S 2.0  1.1  1:13.46     0 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket

mysql> SHOW PROCESSLIST;
+------+-------+-----------+---------+---------+------+--------------+---------------
| Id   | User  | Host      | db      | Command | Time | State        | Info          
+------+-------+-----------+---------+---------+------+--------------+----------------
| 8731 | sites | localhost | mywebsite | Sleep   | 2520 |              | NULL         
| 8734 | sites | localhost | mywebsite | Sleep   | 2516 |              | NULL      
| 8737 | sites | localhost | mywebsite | Sleep   | 2508 |              | NULL    
| 8741 | sites | localhost | mywebsite | Sleep   | 2502 |              | NULL     
...
| 9848 | root  | localhost | NULL    | Query   |    0 | NULL         | SHOW PROCESSLIST 
| 9952 | sites | localhost | mywebsite | Sleep   |    2 |              | NULL
| 9953 | sites | localhost | mywebsite | Query   |    2 | Sending data | SELECT user_info.name, |
+------+-------+-----------+---------+---------+------+--------------+---------------------------
150 rows in set (0.00 sec)

Bem, depois de matar o processo (já consumindo toda a CPU) a saída é alterada (10 minutos depois e ainda não há processos vazios):

mysql> SHOW PROCESSLIST;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id  | User | Host      | db   | Command | Time | State | Info             |
+-----+------+-----------+------+---------+------+-------+------------------+
| 952 | root | localhost | NULL | Query   |    0 | NULL  | SHOW PROCESSLIST |
+-----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)
    
por vlad 12.06.2012 / 19:11

1 resposta

2

Processos adormecidos do MySQL de fato usam CPU.

150 consultas para dormir são muitas. Você tem centenas (ou mais) de conexões simultâneas? Se não, esta é provavelmente a primeira coisa a se olhar.

Em seu aplicativo da web, certifique-se de fechar a conexão do MySQL depois de concluir sua consulta. mysql_close () no PHP, mas a implementação é baseada na sua configuração atual.

    
por 12.06.2012 / 19:16