Antes de o MySQL confirmar uma transação, ele escreverá primeiro o log REDO e, em seguida, confirmará a transação, que é o log de gravação antecipada.
start transaction;
update users set uuid = UUID() from user where id = 1
update users set uuid = UUID() from user where id = 2
update users set uuid = UUID() from user where id = 3
...
...
update users set uuid = UUID() from user where id = 1,000,000
// not yet commit
Se uma transação for atualizar 1 milhão de registros, o que leva 100 segundos. Durante o período de execução, isso uncommitted transaction
produzirá redo log?
innodb produz redo log durante a transação e pode sincronizar com o disco mesmo que a transação não tenha sido confirmada.
O log_buffer é um tamanho finito. Quando transbordar, o material será gravado no arquivo de log. Independentemente do valor de innodb_flatc, a transação eventualmente será liberada para o disco.
Baseado na apresentação de Jeremy Cole InnoDB: A journey to the core III in Percona Live MySQL Conference 2015.
Quando a transação é iniciada pela primeira vez:
Modificação de registro
Cada vez que o UPDATE modifica um registro:
Confirmação de transação
Quando a transação é confirmada (implícita ou explicitamente):
Conclusão
A transação não confirmada produzirá redo log?
Sim.
Referência