Ответ 1
-
Время блокировки - это время, потраченное до начала выполнения запроса. I.e., время, ожидающее, пока другие потоки откажутся от своих блокировок по данным, которые должен блокировать текущий запрос.
-
Время запроса - время выполнения запроса. Это может включать ожидание ввода-вывода, если строки еще не находятся в пуле буферов. Повторение одного и того же запроса для одних и тех же данных может быть более быстрым после загрузки данных в пул буферов.
Если ваш запрос сортируется на диске для заданного запроса, он будет медленнее, если он рассмотрит несколько строк.
Если ваша система ввода/вывода перенапряжена, вы можете получить прерывистую медлительность. Это также может произойти с виртуализированным вводом-выводом (например, дешевые экземпляры AWS). Или, если ваши диски начинают терпеть неудачу, они могут периодически получать ошибки.
Мониторинг iostat и посмотреть длину очереди, средний срок ожидания и время обслуживания. Посмотрите, есть ли периоды медлительности, или если производительность и пропускная способность более или менее согласованы.
-
Проверенные строки не отражают несколько операций ввода-вывода, необходимых для получения заданной строки. Например, если в строке много больших столбцов BLOB/TEXT/VARCHAR, хранящихся на страницах переполнения. Или, если транзакция должна посещать сегмент отката для извлечения старых версий некоторых строк, если они были изменены с момента начала этой транзакции.
Проверенные строки также не говорят нам, насколько сложны выражения в вашем запросе. Вы могли бы рассчитывать последовательности Фибоначчи в хранимых функциях или что-то такое сумасшедшее.
Не видя запросов и их отчета EXPLAIN, трудно обобщить объяснение медлительности, учитывая только те числа из медленного журнала запросов.
MySQL, безусловно, может хранить 200 миллионов строк в таблице, но в этом масштабе вы начинаете получать проблемы с производительностью, даже если индекс может уменьшить поиск до 483 рассмотренных строк. Это связано с тем, что глубина индекса B-дерева и размер индексированного столбца напрямую связаны с количеством операций ввода-вывода, необходимых для поиска эти 483 строки. Чем больше операций ввода-вывода, тем дольше это требуется, и это не отражается на проверенных строках. Время запроса включает время ввода-вывода, но не ясно, сколько времени запроса связано с I/O.
Несколько других мест для поиска более подробной диагностики:
-
MySQL Query Profiler (но обратите внимание, что это устарело в пользу схемы производительности)
-
Расширенный журнал запросов медленного запроса в Percona Server сообщает время ожидания запроса, ожидающего ввода-вывода.