Оператор select блокирует операцию чтения / записи в таблице InnoDB

У меня есть запрос Select, который выполняется на транзакционной таблице, имеющей более 4 миллионов записей. Всякий раз, когда я выполняю этот запрос, я наблюдаю, что все операции записи и обновления в этой конкретной транзакционной таблице приостанавливаются, и мы начинаем получать исключения со стороны Java, превышающие время ожидания блокировки, попробуйте перезапустить транзакцию. В настоящее время время ожидания блокировки установлено на 200 секунд. Я не могу понять, почему оператор select может создавать такие блокировки для таблицы и блокировать все операторы вставки / обновления. Механизм хранения таблиц - InnoDb, а первичный ключ - ключ автоинкремента. Версия MySQL - 5.1.40. Также я не запускаю никакую транзакцию перед выполнением оператора выбора.

Любая идея?

1 ответ

Так что, да, ваш SELECT в одной транзакции считывает записи этой таблицы и операции записи, которые касаются одних и тех же записей, должны будут ждать завершения транзакции чтения (если она следует за двухфазной блокировкой).

Этот документ может помочь понять модель блокировок innodb

Другие вопросы по тегам