servidor mysql desligado por causa de muitas conexões

1

Nosso servidor mysql causa sobrecarga enorme devido ao número de conexões abertas. No meu caso, a maioria das conexões está em estado aberto e não posso nem mesmo matá-las. Isso é que não consigo entender. As conexões são assim:

    | 13927 | slimdiz1_dstream | localhost | slimdiz1_docstream         | Query      | 20   | closing tables       | SELECT autoload FROM wp_options WHERE option_name = '_site_transient_theme_roots'                    |
| 13934 | okanaga1_db1     | localhost | okanaga1_db1               | Query      | 5    | Opening tables       | INSERT INTO sessions VALUES('e442db394d16e7ac5d2154ae3e1ccbe4', '1306059991', 'a:5:{s:11:"LoginCooki |
| 13935 | mkca1_wrdp5      | localhost | mkca1_wrdp5                | Query      | 7    | Opening tables       | SELECT * FROM wp_users WHERE ID = 1 ..

Número de conexões para o servidor da web (max é 150):

    ps -e | grep httpd | wc -l
109

Memória disponível:

    free -mto
             total       used       free     shared    buffers     cached
Mem:          7974       5565       2409          0        153       1373
Swap:         2047         31       2016
Total:       10022       5597       4425

Versão do servidor MySQL e o arquivo de configuração:

    [mysqld]

safe-show-database

set-variable = max_connections=450
set-variable = interactive_timeout=150
set-variable = connect_timeout=35
set-variable = wait_timeout=70
set-variable = max_user_connections=30

set-variable = key_buffer=48M
set-variable = read_buffer=5M
set-variable = join_buffer=1M
set-variable = record_buffer=1M
set-variable = sort_buffer=2M

set-variable = table_cache=1028
set-variable = thread_cache=128

set-variable = query_cache_limit=1M
set-variable = query_cache_size=1024M
set-variable = query_cache_type=1
set-variable = thread_concurrency=4
set-variable = max_allowed_packet=5M

set-variable = delayed_insert_limit=80
set-variable = delayed_insert_timeout=200
set-variable = delayed_queue_size=700

set-variable = flush_time=300


mysql  Ver 14.12 Distrib 5.0.91,
Linux 2.6.38.3-grsec 

Eu estou matando os processos mysql quando a carga está muito alta usando os seguintes comandos:

killall -9 httpd php
mysqladmin pr | awk {'print$2'} | xargs -i mysqladmin kill {};

Você poderia, por favor, me ajudar a entender por que os processos são desligados no estado de abertura, embora existam recursos livres no servidor?

P.S. Eu pesquisei sobre este assunto, li alguns artigos, procurei neste fórum sem sucesso.

Agradeço antecipadamente por qualquer assistência.

Atualizar. top -c output:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
    24738 mysql     20   0 1480m 310m 4612 S  70  13   7:46.33 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql
    
por Andrew 22.05.2011 / 12:14

1 resposta

1

Uma possível causa comum para solicitações SQL "acumulando-se" em um servidor é MySQL's / "Mecanismo de bloqueio" do MyISAM, que nem sequer merece o seu nome . Se você tiver uma consulta SELECT de execução demorada, qualquer consulta INSERT, UPDATE ou DELETE gravada nas tabelas usadas / bloqueadas pelo SELECT de execução longa causaria um "congestionamento" e interromperia qualquer consulta consecutiva usando qualquer um dos comandos. tabelas afetadas.

Use o comando SHOW FULL PROCESSLIST no MySQL para verificar se você tem muitas consultas no estado "Bloqueado" quando atingir essa condição novamente.

    
por 22.05.2011 / 14:01

Tags