1 sql 提交时,mysql服务器首先通过参数max_allowed_packet检查sql的size,如果超出,则直接提示mysql go away.
2 server 从存储将需要修改的数据page load到内存(受制于innodb_buffer_pool_size)中。
3 写page,同时写redo undo log.
4 如果sql size 超过redo undo log 的buffer设定(innodb_log_file_size,innodb_log_files_in_group)则,redo undo log 写入磁盘。
这样的变化可以通过参数Innodb_log_waits (show global status)观察到。
5 当 commit 发生时,首先提交undo/redo log 到磁盘中,然后再将dirty page 写入磁盘(也可能仍然缓存在innodb_buffer_pool_size中)。
6 如果未提交完成断电,此时checkpoint 之前的数据能够正确的保证一致性和原则性。
待续
时间: 2024-11-05 11:27:34