Spec-Zone.ru › MySQL 9.2

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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/innodb-performance-ro-txn.html

Spec-Zone.ru

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