Spec-Zone.ru › MySQL 5.7

8.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, см. Раздел 13.3.1, «Операторы START TRANSACTION, COMMIT и ROLLBACK».

Примечание

Транзакции, которые соответствуют автоматическому подтверждению, неблокирующим и только для чтения (AC-NL-RO), исключаются из определённых внутренних InnoDB структур данных и поэтому не отображаются в выходных данных SHOW ENGINE INNODB STATUS.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-performance-ro-txn.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API