MySQL-重做日志 redo log -原理
2024-08-31 04:10:48
【redo log buffer】【redo log file】-原理
目录:
1.重做日志写入过程图
2.相关知识点汇总图
3.redo_log_buffer 原理
4.redo_log_file 原理
1. 重做日志写入过程:
2. 相关知识点汇总:
3. redo log buffer 原理
重做日志缓冲(redo log buffer)是Innodb存储引擎的内存区域中的一部分。
【重做日志信息--(1)-->redo log buffer--(2)-->重做日志文件】
在(2)中涉及知识:
<1>.关于innodb_log_buffer_size的大小:(默认8M)
mysql> show variables like 'innodb_log_buffer_size%';
+------------------------+---------+
| innodb_log_buffer_size | 8388608 |
+------------------------+---------+
8388608(Byte)/1024/1024=8M
重做日志缓冲不需要设置的太大,只要保证每秒产生的事务量在缓冲大小范围之内。因为每秒都会刷新缓冲到日志文件。8M足够了。
<2>.在以下三种情况下,会将重做日志缓冲中的内容刷新到外部磁盘的重做日志文件中。
- Master Thread 每一秒将重做日志缓冲刷新到重做日志文件;
- 每个事务提交时会将重做日志缓冲刷新到重做日志文件;
- 当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件。
4. redo log file 原理
<1>.重做日志介绍
日志文件名:
1.innodb_log_group_home_dir参数指定的目录下有两个文件:ib_logfile0,ib_logfile1
2.该文件被称为:重做日志文件(redo log file),记录Innodb存储引擎的事务日志。至关重要!!!
3.例如:服务器意外宕机导致实例失败,Innodb存储引擎利用重做日志恢复到宕机前的状态,以此保证数据的完整性。
日志文件组:
1.每个Innodb存储引擎至少有1个重做日志文件组,每个组至少包含2个重做日志文件(ib_logfile0,ib_logfile1).
2.可以通过设置多个镜像日志组(mirrored log groups),将不同组放到不同磁盘,提高重做日志的高可用性。
3.日志组中的文件大小是一致的,以循环的方式运行。文件1写满时,切换到文件2,文件2写满时,再次切换到文件1.
日志文件参数:
1.innodb_log_file_size 重做日志文件的大小。
2.innodb_log_files_in_group 指定重做日志文件组中文件的数量,默认2
3.innodb_mirrored_log_groups 指定了日志镜像文件组的数量,默认1
4.innodb_log_group_home_dir 指定日志文件组所在的路径,默认./ ,表示在数据库的数据目录下。
<2>.重做日志文件大小设置
- 太大:恢复时可能需要很长时间
- 太小:可能导致一个事务需要多次切换重做日志文件;会导致async checkpoint,导致性能抖动。
- 错误日志警告信息:
InnoDB:ERROR:the age of the last checkpoint is 9433645,InnoDB:which exceeds the log group capacity 9433498.
解析:重做日志有个capacity变量,代表最后的检查点不能超过这个阈值,如果超过,必须将缓冲池中脏页列表(flush list)中的部分脏数据页写回磁盘,这是会导致用户线程的阻塞。
<3>.二进制日志和重做日志的对比:
1.类别
二进制日志:记录MySQL数据库相关的日志记录,包括InnoDB,MyISAM等其它存储引擎的日志。
重做日志:只记录InnoDB存储引擎本身的事务日志。
2.内容
二进制日志:记录事务的具体操作内容,是逻辑日志。
重做日志:记录每个页的更改的物理情况。
3.时间
二进制日志:只在事务提交完成后进行写入,只写磁盘一次,不论这时事务量多大。
重做日志:在事务进行中,就不断有重做日志条目(redo entry)写入重做日志文件。
<4>.重做日志条目
1.条目基本格式
redo_log_type (1字节) | space (压缩后可能<4字节) | page_no | redo_log_body |
reod_log_type: 占用1字节,表示重做日志类型。各种不同操作有不同的重做日志格式,但有基本的格式。
space:表空间的ID,采用压缩的方式,占用空间可能小于4字节。
page_no:页的偏移量,同样采用压缩方式
redo_log_body:每个重做日志的数据部分,恢复时需要调用相应的函数解析。
<5>.写入过程
1.重做日志信息 先写入 重做日志缓冲 再按一定条件顺序写入重做日志文件!
2.redo log buffer 向 redo log file 写,是按512个字节,也就是一个扇区的大小进行写入。扇区是写入的最小单位,一定能写入成功,因此过程中不需要double write.
最新文章
- 取文件MD5 WINAPI
- Django URL的命令空间
- js的一些压缩和优化性能
- BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊 ——Link-Cut Tree
- 面向对象php基本格式、构造、析构、访问修饰符
- SQL是关于集合的
- c++ goto的使用
- ERROR 1442 (HY000):because it is already used by statement which invoked this stored function/tr
- java 并发官方教程
- C# - 中断模式下的调试
- N个数的数组求N-1个数组合乘积最大的一组
- iOS 开发 入门:使用Ad Hoc 进行用户测试
- 【USACO 3.1.6】邮票
- jQuery的入门与简介《思维导图》
- 关于oracle数据库(10)函数
- PAT (Advanced Level) 1003. Emergency (25)
- 发票OCR识别/票据OCR自动识别
- Python网络编程socket练习(TCP)
- CompletableFuture
- 关于IOS某图片添加控件,图片从相册或拍照保存后,再次进入时点击放大图无法显示的问题
热门文章
- (四)DIH导入结构化数据
- js HTML DOM TableRow 对象(innerHTML)
- 通知url必须为直接可访问的url,不能携带参数 异步接收微信支付结果通知的回调地址 不能携带参数。 回调地址后是否可以加自定义参数 同步回调地址 异步回调地址 return_url和notify_url的区别
- 问题:Unable to find a &#39;userdata.img&#39; file for ABI armeabi to copy into the AVD folder.
- testlink1.9.3测试管理工具安装
- Oracle 12c 读书笔记(二):Oracle数据库体系结构
- 前端框架之jQuery
- vb.net 正則表達式 取 固定格式的字符
- Axure快捷键
- Personal Ubuntu