10.5.3 Оптимизация транзакций InnoDB только для чтения
InnoDB могут избежать накладных расходов, связанных с настройкой (TRX_ID поля) для транзакций, которые известны как только для чтения. Идентификатор транзакции необходим только для , которые могут выполнять операции записи или , такие как SELECT ... FOR UPDATE. Устранение ненужных идентификаторов транзакций уменьшает размер внутренних структур данных, которые просматриваются каждый раз, когда запрос или оператор изменения данных строит .
InnoDB обнаруживает транзакции только для чтения, когда:
-
Транзакция запускается с оператором
START TRANSACTION READ ONLY. В этом случае попытка внести изменения в базу данных (дляInnoDB,MyISAMили других типов таблиц) приводит к ошибке, и транзакция продолжает выполняться в режиме только для чтения:ERROR 1792 (25006): Cannot execute statement in a READ ONLY transaction.
Вы по-прежнему можете вносить изменения в временные таблицы, специфичные для сессии, в транзакции только для чтения или выполнять запросы блокировки для них, поскольку эти изменения и блокировки не видны другим транзакциям.
Параметр
autocommitвключен, поэтому транзакция гарантированно является единственным оператором, а единственный оператор, составляющий транзакцию, является оператором “без блокировки”SELECT. То есть,SELECT, который не использует предложениеFOR UPDATEилиLOCK IN SHARED MODE.Транзакция запускается без опции
READ ONLY, но ещё не выполнялись обновления или операторы, явно блокирующие строки. До тех пор, пока обновления или явные блокировки не потребуются, транзакция остается в режиме только для чтения.
Таким образом, для интенсивно используемой для чтения программы, например, генератора отчетов, вы можете настроить последовательность InnoDB запросов, объединив их внутри операторов START TRANSACTION READ
ONLY и COMMIT, или включив параметр autocommit перед запуском SELECT операторов, или просто избегая любых операторов изменения данных, перемежающихся с запросами.
Для получения информации о START
TRANSACTION и autocommit, см. Раздел 15.3.1, «Операторы START TRANSACTION, COMMIT и ROLLBACK».
Транзакции, которые соответствуют автоматическому подтверждению, без блокировки и только для чтения (AC-NL-RO), исключаются из определенных внутренних InnoDB структур данных и, следовательно, не отображаются в результатах SHOW ENGINE
INNODB STATUS.
© 2025 Oracle
Licensed under the GPLv2 License.