Spec-Zone .ru
спецификации, руководства, описания, API

14.2.3.1. InnoDB Модель транзакции и Блокировка

Чтобы реализовать крупномасштабное, занятое, или высоконадежное приложение базы данных, портировать существенный код от различной системы баз данных, или продвинуть производительность MySQL к пределам законов физики, следует понять понятия транзакций и блокирующий, поскольку они касаются механизма хранения InnoDB.

В InnoDB модель транзакции, цель состоит в том, чтобы объединить лучшие свойства базы данных мультиуправления версиями с традиционной двухфазной блокировкой. InnoDB делает соединение уровня строки и выполняет запросы как непротиворечивые чтения без блокировки по умолчанию, в стиле Oracle. Информация о блокировке в InnoDB сохранен так пространство эффективно, что повышение уровня блокировок не необходимо: Как правило, нескольким пользователям разрешают привязать каждую строку InnoDB таблицы, или любое случайное подмножество строк, без порождения InnoDB исчерпание памяти.

В InnoDB, все пользовательское действие происходит в транзакции. Если режим автоматической фиксации включается, каждый SQL-оператор формирует единственную транзакцию самостоятельно. По умолчанию MySQL запускает сеанс для каждого нового соединения с включенной автоматической фиксацией, таким образом, MySQL делает фиксацию после каждого SQL-оператора если, что оператор не возвращал ошибку. Если оператор возвращает ошибку, поведение фиксации или отката зависит от ошибки. См. Раздел 14.2.3.15,"InnoDB Обработка ошибок".

Сеанс, у которого есть включенная автоматическая фиксация, может выполнить транзакцию многократного оператора, запуская ее с явного START TRANSACTION или BEGIN оператор и окончание этого с a COMMIT или ROLLBACK оператор. См. Раздел 13.3.1,"START TRANSACTION, COMMIT, и ROLLBACK Синтаксис".

Если режим автоматической фиксации отключается в пределах сеанса с SET autocommit = 0, у сеанса всегда есть открытая транзакция. A COMMIT или ROLLBACK оператор заканчивает текущую транзакцию, и новый запускается.

A COMMIT средства, что изменения, сделанные в текущей транзакции, делаются постоянными и становятся видимыми к другим сеансам. A ROLLBACK оператор, с другой стороны, отменяет все модификации, сделанные текущей транзакцией. Оба COMMIT и ROLLBACK выпустите все InnoDB блокировки, которые были установлены во время текущей транзакции.

С точки зрения уровней изоляции транзакции SQL:1992, значения по умолчанию InnoDB уровень REPEATABLE READ. InnoDB предложения все четыре уровня изоляции транзакции описываются стандартом SQL: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, и SERIALIZABLE.

Пользователь может изменить уровень изоляции для единственного сеанса или для всех последующих соединений с SET TRANSACTION оператор. Чтобы установить уровень изоляции значения по умолчанию сервера для всех соединений, используйте --transaction-isolation опция на командной строке или в файле опции. Для получения дальнейшей информации об уровнях изоляции и устанавливающем уровень синтаксисе, см. Раздел 13.3.6,"SET TRANSACTION Синтаксис".

В блокировке на уровне строки, InnoDB обычно блокировка следующего ключа использования. Это означает, что кроме того индексируют записи, InnoDB может также заблокировать разрыв, предшествующий индексировать записи, чтобы блокировать вставки другими сеансами, где индексированные значения были бы вставлены в тот разрыв в пределах древовидной структуры данных. Следующая блокировка ключа обращается к блокировке, которая блокирует индексировать запись и разрыв перед нею. Блокировка разрыва обращается к блокировке, которая блокирует только разрыв прежде, чем некоторые индексируют запись.

Для получения дополнительной информации о блокировке на уровне строки, и обстоятельствах, при которых отключается блокировка разрыва, см. Раздел 14.2.3.5,"InnoDB Запись, Разрыв, и Следующие блокировки ключа".