Muitos processos NULL no MySQL

3

Desde a semana passada sem um motivo específico, meu site começou a desacelerar drasticamente. Eu entrei no MySQL e executei o show processlist que resultou em algo como isto:

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 eu reinicio o MySQL, não tenho processos que são esperados. Quando atualizo meu site e procuro rapidamente os processos, vejo algumas consultas que desaparecem depois de um momento. Tudo está perfeito, mas depois de algum tempo fora do azul novamente eu recebo muitos processos, como mostrado acima. Isso naturalmente congela meu site.

Eles parecem desaparecer depois de algum tempo, mas antes do valor de wait_timeout e, em seguida, aparecem novamente após algum tempo com IDs diferentes.

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

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

parte do my.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 apontar na direção certa. Estou sem ideias.

EDIT A coisa toda parece ser relevante para esses bugs do MySQL:
link
link
Infelizmente eles não estão resolvidos: (

    
por 6bytes 25.01.2010 / 00:28

1 resposta

2

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

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

  2. Certifique-se de que alguém não esteja enviando consultas para 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 nem mesmo visitar seu site.

Acompanhe suas conexões ativas por um tempo prestando muita atenção no netstat. O wait_timeout é uma indicação de que alguém / alguma coisa consultou seu servidor. Manter um caminho mais próximo ajudará você a descobrir quem 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 mysql logging brevemente. Seu servidor terá um hit mas você 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: Eu fiz as sugestões anteriores porque o valor NULL no campo de informações indica que nenhuma instrução está sendo executada.

    
por 25.01.2010 / 00:41

Tags