Как я должен интерпретировать «время блокировки» в журнале медленных запросов mysql?

12

Я пытаюсь понять, как лучше всего интерпретировать время блокировки для запросов, которые отображаются в нашем медленном журнале запросов MySQL.

Например, если запрос UPDATE имеет время блокировки 10 секунд. Я предполагаю, что это общее время после того, как запрос на обновление получает блокировку. Даже если он ожидает завершения предыдущих запросов выбора, но не выполняет само действие UPDATE, часы должны тикать, поскольку они блокируют все запросы SELECT, которые выстроились в очередь после запроса UPDATE.

А как насчет блокировки запроса SELECT. Почему некоторые запросы на выбор имеют время блокировки? Это потому, что после запроса UPDATE они блокируют таблицу вместе.

Haluk
источник

Ответы:

19

В lock_timeжурнале медленных запросов фактически указывается количество времени, которое запрос провел в ожидании получения блокировки, необходимой для выполнения. Например, UPDATESзапросам нужна блокировка записи.

Блокировка также зависит от механизма хранения, который вы используете в таблице. При записи InnoDB будет использовать блокировку на уровне строк и блокировать только изменяемые строки. MyISAM заблокирует всю таблицу, пока обновление / вставка / удаление не будут завершены.

Блокировка всей таблицы для MyISAM - это серьезная причина, по которой у SELECTзапросов будет время блокировки в журнале медленных запросов.

Дерек Дауни
источник