14.22.4 Обработка ошибок InnoDB
В следующих пунктах описывается, как InnoDB обрабатывает ошибки. InnoDB иногда откатывает только оператор, который завершился ошибкой, а иногда откатывает всю транзакцию.
При отсутствии места на диске возникает ошибка MySQL
Table is full, иInnoDBоткатывает SQL-оператор.-
Сбой транзакции заставляет
InnoDBоткатать всю . В этом случае повторите всю транзакцию.Таймаут ожидания блокировки заставляет
InnoDBоткатить текущий оператор (оператор, который ожидал блокировки и столкнулся с таймаутом). Чтобы откатить всю транзакцию, запустите сервер с включённым--innodb-rollback-on-timeout. Повторите оператор, если используется стандартное поведение, или всю транзакцию, если--innodb-rollback-on-timeoutвключён.Столкновения и таймауты ожидания блокировок являются обычным явлением на загруженных серверах, и приложениям необходимо учитывать возможность их возникновения и обрабатывать их, пытаясь повторить операцию. Можно уменьшить вероятность их возникновения, выполняя как можно меньше работы между первым изменением данных в рамках транзакции и подтверждением, чтобы блокировки держались как можно меньше времени и для как можно меньшего количества строк. Иногда разделение работы между различными транзакциями может быть практичным и полезным.
Ошибка дублирования ключа откатывает SQL-оператор, если вы не указали опцию
IGNOREв своём операторе.Ошибка
row too long errorоткатывает SQL-оператор.Другие ошибки в основном обнаруживаются слоем кода MySQL (над уровнем хранилища данных
InnoDB), и они откатывают соответствующий SQL-оператор. Блокировки не освобождаются при откатe одного SQL-оператора.
Во время неявных откатов, а также во время выполнения явного SQL-оператора ROLLBACK , SHOW PROCESSLIST отображает Rolling back в столбце State для соответствующего подключения.
© 2025 Oracle
Licensed under the GPLv2 License.