17.20.5 Обработка ошибок 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-инструкцию. Блокировки не освобождаются при откате одной SQL-инструкции.
Во время неявных откатов, а также при выполнении явной SQL-инструкции ROLLBACK, SHOW PROCESSLIST отображает Rolling back в столбце State для соответствующего подключения.
© 2025 Oracle
Licensed under the GPLv2 License.