Мы столкнулись с проблемой после перемещения базы данных нашего клиента на дополнительный сервер. Это должно было оказать положительное влияние на производительность сайта, но есть проблема с блокировкой таблицы в MyISAM. (Я слышал об использовании InnoDB вместо MyISAM, но мы не можем изменить движок в ближайшем будущем).
Мы могли бы заметить это по запросу на обновление, который выполняется, когда модератор активирует комментарий на сайте. Это процесс:
- обработан запрос на обновление
SET status = 1 WHERE id = 5
(индекс установлен) - кэшированные файлы страницы удалены
На этом этапе вся страница становится медленной. Сама база данных занята в течение нескольких минут. Я получил список процессов несколько раз и увидел около 60 записей различных запросов выбора, которые все находились в состоянии ожидания блокировки на уровне таблицы .
1. Я не понимаю, почему это обновление таблицы article_comments
может повлиять на операторы выбора для таблицы, ожидающей article
блокировки на уровне таблицы. В списке процессов почти все ожидающие запросы были из этой таблицы. Я читал о том, что обновления / вставки предпочтительнее, чем выбор, и что это может вызвать такие проблемы, но сама таблица статей не обновляется при активации комментариев, поэтому выбор не должен ждать. Я неправильно понял это?
2. Есть ли что-то кроме изменения InnoDB, чтобы предотвратить это поведение или, по крайней мере, получить лучший баланс? Меня очень раздражает тот факт, что эта проблема не появилась до переноса базы данных на новый сервер. Я предполагаю, что есть некоторая неправильная конфигурация, но я не знаю, как идентифицировать.
key_buffer_size
был настроен на 1GB
. Увеличение этого, чтобы 10GB
уменьшить проблему.