Muitos processos NULL no MySQL

Muitos processos NULL no MySQL

Desde a semana passada, sem nenhum motivo específico, meu site começou a ficar drasticamente lento. Entrei no MySQL e executei show processlist que resultou em algo assim:

mysql> show full processlist;
+------+------+-----------+---------+---------+------+-------+------------------+
| Id   | User | Host      | db      | Command | Time | State | Info             |
+------+------+-----------+---------+---------+------+-------+------------------+
| 2047 | web  | localhost | myDB    | Sleep   |   81 |       | NULL             |
| 2049 | web  | localhost | myDB    | Sleep   |   81 |       | NULL             |
| 2050 | web  | localhost | myDB    | Sleep   |   81 |       | NULL             |
| 2052 | web  | localhost | myDB    | Sleep   |   81 |       | NULL             |
| 2053 | web  | localhost | myDB    | Sleep   |   81 |       | NULL             |
| 2054 | web  | localhost | myDB    | Sleep   |   81 |       | NULL             |
| 2055 | web  | localhost | myDB    | Sleep   |   81 |       | NULL             |
...
| 2066 | web  | localhost | myDB    | Sleep   |   80 |       | NULL             |
| 2067 | web  | localhost | myDB    | Sleep   |   80 |       | NULL             |
| 2178 | web  | localhost | myDB    | Sleep   |   76 |       | NULL             |
+------+------+-----------+---------+---------+------+-------+------------------+
131 rows in set (0.00 sec)

Quando reinicio o MySQL, não tenho processos esperados. Quando atualizo meu site e verifico rapidamente os processos, vejo algumas consultas que desaparecem após um momento. Tudo está perfeito, mas depois de algum tempo, do nada, recebo muitos processos como mostrado acima. É claro que isso congela meu site.

Eles parecem desaparecer depois de algum tempo, mas antes do valor de wait_timeoute depois aparecem novamente depois de algum tempo com IDs diferentes.

Alguém tem idéia do que poderia estar causando isso?

Especificações do meu servidor:
CentOS 5
MySQL versão: 5.1.33-log Distribuição de origem
RAM 8 GB

parte do meu.cnf

[mysqld]
default-character-set   = utf8
character_set_server    = utf8
default-collation       = utf8_unicode_ci
collation_server        = utf8_unicode_ci
ft_min_word_len         = 3
port                    = 5689
socket                  = /tmp/mysql.sock
skip-locking
skip-name-resolve
key_buffer_size         = 256M
group_concat_max_len    = 2048
max_allowed_packet      = 10M
table_cache             = 512
table_definition_cache  = 512
sort_buffer_size        = 10M
net_buffer_length       = 8K
read_buffer_size        = 40M
read_rnd_buffer_size    = 10M
myisam_sort_buffer_size = 8M
long_query_time         = 1
net_read_timeout        = 30
net_write_timeout       = 60
log_slow_queries        = /var/log/slowqueries
query_cache_type        = 1
query_cache_limit       = 5MB
query_cache_size        = 134217728
max_heap_table_size     = 24MB
tmp_table_size          = 24MB
expire_logs_days        = 99
max_connections         = 500
init-connect            = 'SET NAMES latin1'
thread_cache_size       = 4
wait_timeout            = 600

Espero que isso ajude um de vocês a me indicar a direção certa. Estou sem ideias.

EDITAR A coisa toda parece ser relevante para os bugs do MySQL:
http://bugs.mysql.com/bug.php?id=8945
http://bugs.mysql.com/bug.php?id=6070
Infelizmente não foram resolvidos :(

Responder1

Verifique os valores do seu servidor mysql. Você está usando usuários padrão no mysql? Eu também daria uma olhada em duas coisas:

  1. Certifique-se de que apenas servidores específicos possam se conectar ao banco de dados mysql. Se você tiver um usuário conectado de %, certifique-se de ter uma boa senha (e um bom motivo).

  2. Certifique-se de que alguém não esteja enviando consultas ao seu aplicativo fora dos requisitos de código que você possui para executar o aplicativo. Alguém pode estar injetando dados em seu banco de dados sem sequer visitar seu site.

Acompanhe suas conexões ativas por um tempo, prestando muita atenção ao netstat. O wait_timeout é uma indicação de que alguém/alguma coisa consultou seu servidor. Acompanhar de perto ajudará você a descobrir quem eles são. Depois de fazer isso, se precisar bloqueá-los rapidamente sem fazer alterações drásticas, use o iptables.

Uma última coisa... habilite o log do mysql brevemente. Seu servidor será atingidomasvocê verá exatamente o que está acontecendo com o mysql.

edite o arquivo my.cnf e adicione (ou atualize) isto:

log             = /var/log/mysql/mysql.log

EDIT: Fiz as sugestões anteriores porque o valor NULL no campo de informações indica que nenhuma instrução está sendo executada.

informação relacionada