У меня есть несколько таблиц в состоянии Locked все время. Пример:
| 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 |
Когда у меня становится слишком много таких процессов, все сайты начинают выдавать ошибки подключения к базе данных, и мне приходится перезапускать сервер MySQL, чтобы они снова заработали.
Я использую движок MyISAM для своих баз данных, CentOS 5.7, WordPress и MySQL 5.1, если это имеет значение.
Я знаю, что вы, вероятно, предлагаете: перейти на InnoDB или оптимизировать код. К сожалению, это выходит за рамки моих возможностей. Мне придется работать с той конфигурацией, которая у меня есть.
Итак, вопрос к вам. Как мне периодически сбрасывать такие запросы? Я уверен, что это поможет, по крайней мере, предотвратить перегрузку сервера.
Я пробовал, flush_time=300
но безуспешно. Вам нужен my.cnf здесь или другие конфиги?
Спасибо всем.
ОБНОВЛЕНИЕ 1. my.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
ОБНОВЛЕНИЕ 2. первые запросы в списке процессов перед блокировками
| 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 |
решение1
Вы можете использовать pt-kill
из Percona Toolkit (http://www.percona.com/software/percona-toolkit/) для завершения запросов, соответствующих указанным критериям. Вы можете настроить задание cron на запуск каждые 300 секунд, чтобы pt-kill --busy-time 300
завершить запросы, выполняемые более 300 секунд.