Назад | Перейти на главную страницу

Как проверить, какой запрос вызвал блокировку

У меня есть некоторые проблемы с моими серверными приложениями, и иногда это приводит к блокировке некоторых таблиц, а затем я получаю тысячи запросов, ожидающих разблокировки таблицы. Но этого не произойдет. Есть ли способ проверить, какой запрос может вызвать блокировку?

думаю show processlist; - лучший способ начать отладку этой проблемы. show processlist показывает, какие потоки запущены и их состояние.

Вы можете использовать Explain также, особенно в ваших наиболее распространенных запросах. Это покажет план выполнения для нужных вам запросов. Возможно, некоторые запросы не имеют индексов или неправильно их используют.

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

Возможно, вам также потребуется настроить некоторые из ваших переменных MySQL. Я бы порекомендовал вам настроиться key_buffer_size, который является размером буфера, используемого для индексных блоков. Настройте это как минимум на 30% вашей оперативной памяти, иначе процесс переиндексации, вероятно, будет слишком медленным.

И последнее, но не менее важное: включите журнал медленных запросов. Это покажет, какие запросы требуют слишком много времени для выполнения.

Надеюсь это поможет!