Ты спрашивал
где хранятся незафиксированные данные, чтобы транзакция READ_UNCOMMITTED могла считывать незафиксированные данные из другой транзакции?
Чтобы ответить на ваш вопрос, вам нужно знать, как выглядит архитектура InnoDB.
Следующая картина была создана лет назад техническим директором Percona Вадимом Ткаченко
Согласно документации MySQL о модели транзакций InnoDB и блокировке
COMMIT означает, что изменения, сделанные в текущей транзакции, сделаны постоянными и становятся видимыми для других сеансов. Оператор ROLLBACK, с другой стороны, отменяет все изменения, сделанные текущей транзакцией. И COMMIT, и ROLLBACK снимают все блокировки InnoDB, которые были установлены во время текущей транзакции.
Поскольку COMMIT и ROLLBACK управляют видимостью данных, READ COMMITTED и READ UNCOMMITTED должны полагаться на структуры и механизмы, которые регистрируют изменения
- Откат сегментов / Отменить пробел
- Redo Logs
- Пробелы в замках против задействованных таблиц
Сегменты отката и Undo Space будут знать, на что были похожи измененные данные, прежде чем изменения будут применены. Журналы повторов будут знать, какие изменения необходимо перенести, чтобы данные обновлялись.
Вы также спросили
почему транзакция READ_COMMITTED не может прочитать незафиксированные данные, то есть выполнить «грязное чтение»? Какой механизм применяет это ограничение?
В игру вступают Redo Logs, Undo Space и Locked. Вы также должны рассмотреть пул буферов InnoDB (где вы можете измерить грязные страницы с помощью innodb_max_dirty_pages_pct , innodb_buffer_pool_pages_dirty и innodb_buffer_pool_bytes_dirty ).
В свете этого, READ COMMITTED будет знать, какие данные появляются навсегда. Поэтому нет необходимости искать грязные страницы, которые не были зафиксированы. READ COMMITED - это не более чем грязное чтение, которое было зафиксировано. READ UNCOMMITTED продолжал бы знать, какие строки должны быть заблокированы, а какие журналы повторов прочитаны или проигнорированы, чтобы сделать данные видимыми.
Чтобы полностью понять блокировку строк для управления изоляцией, прочитайте Модель транзакций InnoDB и Блокировка