MYSQL与INNODB日志文件系统
2021-07-05 14:51:22 0 举报
MYSQL与INNODB日志文件详解,包括了大部分知识点甚至部分冷门知识点
作者其他创作
大纲/内容
51种redolog类型
分类
undolog
记录格式
作用为:PIT恢复、主从复制,审计防止注入
MIXED
与binlog不同的是,记录物理页的更改情况而不是行更改情况或语句,所以redo恢复快很多。同时,binlog只在commit时候写入,而redo在事务过程中一直写。redo是innodb引擎支持的,binlog是MYSQL支持的。
日志文件系统
结合上述两者,默认用statement,有些情况下切换成ROW
查询日志(没啥用)
作用:保证ACID中的持久性,在提交时,先将redo写入磁盘再写入真正的数据。即WAL技术
WAL原理- 通过cache合并多条写操作为一条,减少IO次数- 日志顺序追加性能远高于数据随机写.- 随机内存处理性能远高于数据随机处理. 性能:顺序的日志磁盘处理+随机的数据内存处理>随机的数据磁盘处理
逻辑读取次数(包含所有磁盘/缓冲池读取)
当数据库无法正常启动时,第一个定位错误日志。数据库速度慢时,也可以定位错误日志得到建议(如增大缓存池,增大redologbuffer等)
物理读取次数(IO次数)
ROW
错误日志
由于事务的隔离性,插入语句对其他事务不可见,所以insert语句不需要支持MVCC,提交即删就好
update undolog
记录行的更改情况,文件会膨大许多,但同时获得更好的可用性,解决了主从数据库因为uuid(),触发器等原因造成数据不一致的问题
mysql自身支持捕获方式
undo是逻辑日志,事务insert,回滚时候delete,update时相反update而已,因此,事务将表空间扩大后,回滚后表空间并不会减小。undo是伴随着redo产生的,也会产生redo
redolog不需要doublewrite技术,因为redolog是以block(512字节)进行存储,与磁盘扇区大小一致,不会出现页断裂
为了保证数据库的高可用性,最好在该日志每次写的时候同步到磁盘(对性能有影响)可以使用mysqlbinlog工具查看binlog
需要进行MVCC,事务提交后,delete操作会多一步将操作记录的delete_flag置1的操作,update不用,然后放入undo链表,当没有其他事务引用时,通过purge线程进行回收。
作用:事务的回滚以及MVCC支持
保存在数据库内部一个特殊的segment中,并且可重用
查询时间大于long_query_time语句
未走索引语句
INNODB扩充捕获方式
可以设置每分钟最多有几个语句加入慢查询日志,使用mysqldumpslow工具,可以更好的排查慢查询日志,默认输出为File,也可以输出成table格式(成为mysql下的slow_log表)
insert undolog
statement(传统记录,记录日志的逻辑SQL语句)
redolog
慢查询日志
binlog(写入所有更改操作和部分查询操作)
收藏
收藏
0 条评论
下一页