@Tonako

При использовании InnoDB как mysql сервер обрабатывает транзакции?

При использовании InnoDB как mysql сервер обрабатывает транзакции? как я вижу выстраивает в очередь по последовательности запросов. А что если теоретически 2 запроса поступят в одно и то же время? такое ведь возможно? как он обработает их? какой из них будет первый в очереди, и как он определяет очередность для одновременных запросов?
  • Вопрос задан
  • 2586 просмотров
Пригласить эксперта
Ответы на вопрос 1
InnoDB использует облегчённый MVCC.

InnoDB adds three fields to each row stored in the database. A 6-byte DB_TRX_ID field indicates the transaction identifier for the last transaction that inserted or updated the row. Also, a deletion is treated internally as an update where a special bit in the row is set to mark it as deleted.

Each row also contains a 7-byte DB_ROLL_PTR field called the roll pointer. The roll pointer points to an undo log record written to the rollback segment. If the row was updated the undo log record contains the information necessary to rebuild the content of the row before it was updated.

A 6-byte DB_ROW_ID field contains a row ID that increases monotonically as new rows are inserted. If InnoDB generates a clustered index automatically, the index contains row ID values. Otherwise, the DB_ROW_ID column does not appear in any index.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы