Итак, мое понимание медленного журнала запросов заключается в том, что он регистрирует информацию обо всех тех запросах, которые заняли >= время (в секундах), которое мы установили в файле my.conf.
Теперь давайте возьмем 3 случая из 3 разных запросов SELECT (против таблиц с движком INNODB):
QUERY I: Query_time: 32.937667 Lock_time: 0.000081 Rows_sent: 343 Rows_examined: 12714043
QUERY II: Query_time: 12.937667 Lock_time: 0.000081 Rows_sent: 43 Rows_examined: 714043
QUERY III: Query_time: 42.937667 Lock_time: 0.000081 Rows_sent: 18 Rows_examined: 483
Для меня оба QUERY я и QUERY II выглядят как возможные случаи плохого запроса или плохой индексации (или отсутствия индексации) или фрагментированных данных таблицы и т.д. (что-нибудь еще, что я мог пропустить?), который пользователь может попытаться улучшить время выполнения запроса.
Но для QUERY III я не могу опустить голову, я имею в виду то, что действительно может быть неправильно с БД, что требуется 42 секунды, чтобы просто изучить 483 строки и отправил обратно 18 из них (с небрежной блокировкой время). Это становится еще более запутанным, когда я вижу, что это происходит с перерывами.
Так что я действительно хочу спросить здесь:
- Как мне интерпретировать информацию о времени блокировки? Означает ли это, что запрос должен был ждать столько секунд, прежде чем он начнет выполняться? Если да, то в моем примере запрос III фактически занял 42 секунды, чтобы исследовать 483 строки и отправил обратно 18 из них?
- если время блокировки является пренебрежимым, но все же время запроса супер огромно, и только несколько сотен строк проверяются и отправляются обратно, где я должен искать проблемы?
- Может ли быть так, что запрос тратит много времени в какой-то основной активности ввода-вывода? скажем, протоколирование или ведение журнала.
- Насколько сильно размер таблицы влияет на производительность запроса? например мы можем сказать, что MySQL достаточно хорош, чтобы обрабатывать таблицу с 200 + миллионами строк.
- Есть ли какой-либо лучший инструмент или способ отслеживать активность БД, специально для того, чтобы изобразить фоновую активность БД? Короче говоря, чтобы проверить, где этот запрос тратит большую часть времени.
На такие медленные запросы может быть много факторов, поэтому, если вы почувствуете, что вам нужна дополнительная информация из стороны, чтобы помочь мне, пожалуйста, сообщите мне.