MySQL « Тяжелый запрос в MySQL тормозит все остальные

Есть таблица (MyISAM) на 1,500,000 записей, раз в несколько часов по крону запускается скрипт и делает очень тяжелый запрос в нее (только чтение)

Проблема в том что при этом начинают жутко тормозить все остальные запросы и соответственно всеь сайт. Простая выборка по id, которая занимала 0.001 сек, занимает 3-5 сек :(

Можно ли как-то сделать, чтобы пусть тяжелый запрос выполнялся медленнее, но при этом все остальные работали нормально?

Все это на выделенном сервере с 2 xeonами и 16 gb памяти...

Вот текущий my.cnf:

port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
 

1 ответов


я бы посоветовал настроить master-slave репликацию. Все боевые запросы в master, все запросы которые по крону делаются - в slave. Раз вы все равно только читаете, то это может вам помочь


может стоит посмотреть в сторону InnoDB, особенно учитывая специфику блокировки, когда в MyISAM блокируются таблицы, а в InnoDB отдельные записи?


Да, мне тоже кажется, что дело в заблокированных таблицах. Если ничего не использовано специфичного для MyISAM (типа FULLTEXT индексов, например) - попробуйтей InnoDB.