提问式复习:图文回顾 redo log 相关知识

365次阅读  |  发布于3年以前

1、如何提升 redo日志 的写性能?

buffer pool可以利用「innodb_buffer_pool_size」指定总大小,利用「innodb_buffer_pool_instances」指定实例数,但是必须size大于等于1G才生效。

log buffer 可利用「innodb_log_buffer_size」指定 log buffer 的大小;一片连续的内存空间会被划分为N个512字节大小的block。

log file 可以利用「innodb_log_file_size」指定每个 log file 的大小,利用「innodb_log_files_in_group」指定一共多少个log file。

2、redo日志 何时写入log buffer?

详情可看下图:

3、log buffer 中的 redo日志 何时刷盘?

4、我们都知道每次写入 redo日志 ,都是以组为单位,那么我们怎么知道哪些是一组?

5、如何知道下一次redo日志改写到log buffer的哪个位置?

6、如何知道下次从log buffer的哪个位置开始刷入磁盘?

7、如何定位 log buffer 中的 redo日志 对应哪些被修改的数据页;在被修改的数据页中,如何定位到对应的是哪些 redo日志 ?

8、我们知道可以利用 lsn 知道有多少字节数的 redo日志 写入到 log buffer 中,那么我们能有变量对应的知道有多少字节数的 redo日志 被刷入磁盘中吗?

9、lsn 和 log file 的偏移量怎么对得上么?

详情可看下图:

10、log buffer 中的 redo日志 真的会在事务结束时立马刷回到磁盘中吗?

11、log file 都是循环使用,即可以覆盖,那么怎么判断是否可以覆盖?

12、系统崩溃重启,如何利用 redo日志 进行恢复?

13、恢复是扫描一个 redo日志 ,就进行一次恢复吗?

详情可看下图:

14、恢复时,如何知道什么时候结束?

15、如何兼容脏页已经已经刷回磁盘,但是 redo日志 没有刷回磁盘的场景?

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8