mysql redo文件切换
【摘要】 在把log buffer写入磁盘的过程中,需要检查是否log file有足够的空间,如果没有足够空间时需要循环等待。log_writer |--> log_writer_mutex_enter |--> Log_thread_waiting::wait // 等待log buffer中有未write完的redo,或者用户线程触发的 writer_event | |--> os_eve...
在把log buffer写入磁盘的过程中,需要检查是否log file有足够的空间,如果没有足够空间时需要循环等待。
log_writer
|--> log_writer_mutex_enter
|--> Log_thread_waiting::wait // 等待log buffer中有未write完的redo,或者用户线程触发的 writer_event
| |--> os_event_wait_for -> log.writer_event (os_event::timed_wait(pthread_cond_timedwait))
| |--> stop_condition()
| | |--> log_advance_ready_for_write_lsn // 检查 log buffer中是否有 需要write的连续内容
| | | |--> recent_written::advance_tail_until; // 重要函数 更新link buf;
|--> log_writer_write_buffer // 如果发现有需要写的内容,开始干活
| |--> log_writer_wait_on_checkpoint // 循环等待直到log file有空间
| |--> log_files_write_buffer // write 到 page cache
| | |--> compute_how_much_to_write // 计算需要写入的数据大小
| | |--> prepare_full_blocks // 更新即将写入的 LOG BLOCK的物理信息
| | |--> write_blocks -> fil_redo_io -> do_redo_io // redo write io
| | | |--> os_file_write [见下文]
| | |--> log.write_lsn.store // 更新 新的 write_lsn
| | |--> notify_about_advanced_write_lsn // 【见下文】
| | |--> log_update_buf_limit // 更新 buf_limit_sn,上文 log_buffer_reserve有,判断log buffer空间
https://zhuanlan.zhihu.com/p/459433088
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)