vaciar tablas en el estado bloqueado

vaciar tablas en el estado bloqueado

Tengo varias tablas en estado bloqueado todo el tiempo. Un ejemplo:

| 14442 | dbtable1 | localhost | dbname | Query   | 1291 | Locked       | SELECT  * FROM table1 WHERE topic_s='hooks-and-variables'                                   |
| 14443 | dbtable1  | localhost |           | Sleep   | 1291 |              |                                                                                                      |
| 14461 | dbtable1 | localhost | dbname | Query   | 1283 | Locked       | SELECT  table3.forum_id, forum_name, forum_slug, table4.topic_id, topic_name, topic_slug |

Cuando tengo demasiados procesos de este tipo, todos los sitios comienzan a generar errores de conexión a la base de datos y tengo que reiniciar el servidor MySQL para que vuelvan a funcionar.

Utilizo el motor MyISAM para mis bases de datos, CentOS 5.7, WordPress y MySQL 5.1 si es importante.

Sé lo que probablemente sugieres: cambiar a InnoDB u optimizar el código. Desafortunadamente, está más allá de mi alcance. Tengo que trabajar con la configuración que tengo.

Entonces, la pregunta para ti. ¿Cómo puedo eliminar dichas consultas periódicamente? Estoy seguro de que ayudará al menos a evitar que el servidor se sobrecargue.

Lo he intentado flush_time=300sin suerte. ¿Necesitas my.cnf aquí u otras configuraciones?

Gracias a todos.

ACTUALIZACIÓN 1. mi.cnf

[mysqld]
default-character-set=utf8
max_connections=100
set-variable        = long_query_time=10
query_cache_limit   = 32M
query_cache_size    = 128M
query_cache_type    = 1
table_cache=8K
key_buffer_size=100M
thread_cache_size=128
join_buffer_size = 1M
innodb_buffer_pool_size = 100M
join_buffer_size=4M
tmp_table_size=32M
max_heap_table_size=32M
flush_time=200

ACTUALIZACIÓN 2. primeras consultas en la lista de procesos antes de los bloqueos

 | Id  | User | Host | db | Command | Time | State  | Info                                                                            
 | 1515 | dbtable1 | localhost | dbname | Query  | 2511 | Sending data | SELECT  table1.forum_id, forum_slug, forum_name, forum_status, group_id, topic_count, forum_ic |
 | 1571 | dbtable1 | localhost | dbname | Query  | 2478 | Sending data | SELECT  table1.forum_id, forum_slug, forum_name, forum_status, group_id, topic_count, forum_ic |

Respuesta1

Puede utilizar pt-killdesde el kit de herramientas de Percona (http://www.percona.com/software/percona-toolkit/) para eliminar consultas que coincidan con un criterio específico. Puede configurar un trabajo cron para que se ejecute cada 300 segundos para pt-kill --busy-time 300eliminar las consultas que se ejecutan durante 300 segundos.

información relacionada