Você perguntou
onde os dados não confirmados são armazenados, para que uma transação READ_UNCOMMITTED possa ler dados não confirmados de outra transação?
Para responder sua pergunta, você precisa saber como é a arquitetura do InnoDB.
A imagem a seguir foi criada anos atrás por Percona CTO Vadim Tkachenko
De acordo com a documentação do MySQL sobre o modelo de transação e bloqueio do InnoDB
Um COMMIT significa que as alterações feitas na transação atual são permanentes e se tornam visíveis para outras sessões. Uma instrução ROLLBACK, por outro lado, cancela todas as modificações feitas pela transação atual. COMMIT e ROLLBACK liberam todos os bloqueios InnoDB que foram definidos durante a transação atual.
Como COMMIT e ROLLBACK governam a visibilidade dos dados, READ COMMITTED e READ UNCOMMITTED precisariam confiar em estruturas e mecanismos que registram alterações
- Segmentos de reversão / espaço de desfazer
- Refazer Logs
- Lacunas Travas na (s) mesa (s) envolvidas
Os segmentos de reversão e o espaço de desfazer saberiam como eram os dados alterados antes de as alterações serem aplicadas. Refazer registros saberia quais alterações devem ser encaminhadas para que os dados apareçam atualizados.
Você também perguntou
por que não é possível para uma transação READ_COMMITTED ler dados não confirmados, ou seja, executar uma "leitura suja"? Que mecanismo impõe essa restrição?
Refazer logs, desfazer espaço e linhas bloqueadas são ativados. Você também deve considerar o Buffer Pool do InnoDB (onde é possível medir páginas sujas com innodb_max_dirty_pages_pct , innodb_buffer_pool_pages_dirty e innodb_buffer_pool_bytes_dirty ).
À luz disso, READ COMMITTED saberia como os dados aparecem permanentemente. Portanto, não há necessidade de procurar páginas sujas que não foram confirmadas. LEIA COMPROMISSO seria nada mais do que uma leitura suja que foi confirmada. READ UNCOMMITTED continuaria sabendo quais linhas devem ser bloqueadas e quais logs de refazer foram lidos ou ignorados para tornar os dados visíveis.
Para entender completamente o bloqueio de linhas para gerenciar o isolamento, leia O modelo de transação e bloqueio do InnoDB