Tu preguntaste
¿Dónde se almacenan los datos no confirmados, de modo que una transacción READ_UNCOMMITTED puede leer datos no confirmados de otra transacción?
Para responder a su pregunta, necesita saber cómo es la Arquitectura InnoDB.
La siguiente imagen fue creada hace años por el CTO de Percona Vadim Tkachenko
De acuerdo con la documentación de MySQL sobre el modelo de transacción InnoDB y el bloqueo
Un COMPROMISO significa que los cambios realizados en la transacción actual se hacen permanentes y se hacen visibles para otras sesiones. Una declaración ROLLBACK, por otro lado, cancela todas las modificaciones realizadas por la transacción actual. Tanto COMMIT como ROLLBACK liberan todos los bloqueos de InnoDB que se establecieron durante la transacción actual.
Dado que COMMIT y ROLLBACK gobiernan la visibilidad de los datos, READ COMMITTED y READ UNCOMMITTED tendrían que depender de estructuras y mecanismos que registren los cambios.
- Rollback Segments / Undo Space
- Rehacer registros
- Brechas Cerraduras contra la (s) mesa (s) involucradas
Los segmentos de reversión y el espacio de deshacer sabrían cómo se veían los datos modificados antes de aplicarlos. Rehacer registros sabría qué cambios se deben avanzar para que los datos aparezcan actualizados.
También preguntaste
¿Por qué no es posible que una transacción READ_COMMITTED lea datos no confirmados, es decir, realizar una "lectura sucia"? ¿Qué mecanismo hace cumplir esta restricción?
Redo Logs, Undo Space y Filas bloqueadas entran en juego. También debe considerar el InnoDB Buffer Pool (donde puede medir páginas sucias con innodb_max_dirty_pages_pct , innodb_buffer_pool_pages_dirty e innodb_buffer_pool_bytes_dirty ).
A la luz de esto, READ COMMITTED sabría cómo aparecen los datos de forma permanente. Por lo tanto, no es necesario buscar páginas sucias que no se hayan confirmado. LEER COMPROMETIDO no sería más que una lectura sucia que se ha cometido. READ UNCOMMITTED habría seguido sabiendo qué filas se deben bloquear y qué registros de rehacer se han leído o ignorado para que los datos sean visibles.
Para comprender completamente el bloqueo de filas para gestionar el aislamiento, lea El modelo de transacción y bloqueo de InnoDB