mysql优化 个人笔记 非礼勿扰 -m07
作者:互联网
Mysql基本架构图
- 两种优化方式
RBO 基于规则优化
CBO 基于成本优化 这个用的多
Mysql 日志
1. binlog (server)
数据库data目录下的binlog文件
show VARIABLES like '%binlog%'
binary log
恢复数据过程
- 找到最近的一次全量备份数据
- 从备份的时间点开始,将备份的binlog取出来,重放到恢复的那个时刻
2. redolog (存储引擎 innodb)
数据库data目录下有这俩文件
- 当发生数据修改时,innodb存储引擎会将记录下入到redo log中,并更新
内存,此时更新就算完成了,同时innodb引擎会在何时的时机将记录写入到磁盘中 - redo log是固定大小的 是循环写入的
- 有了redo log后 innodb就可以保证即使数据库发生异常重启,之前的记录也不会丢失 叫做 crash-safe
- wal write ahead log
数据写入的时候 不是直接写入磁盘 而是先写入内存 合适时机才会写入磁盘
写入性能上感觉是提升了 - redolog 存储的过程 三种方式
- 加入数据存储过程中 mysql服务器断电了 重启之后 会去redolog中 找日志
然后进行重写
- 加入数据存储过程中 mysql服务器断电了 重启之后 会去redolog中 找日志
- 保证实物的持久化
3. undolog(Innodb存储引擎)
- Undo log 是为了实现实物的原子性 在Mysql数据库Innodb存储引擎中,
还用Undo log 来实现多版本的并发控制(简称:MVCC) - 在操作数据之前,首先将一个数据备份到一个地方(这个存储数据备份的地方叫undo log).然后进行数据修改,如果出现了错误或者用户执行了ROLLBACK语句
系统可以利用Undo log中的备份数据恢复到事物开始之前的状态
注意:
undo log 的逻辑日志,可以理解为: - 当delete一条数据的时候,undo log 会记录一条与之对应的insert语句
- 当insert一条记录时,undo log会记录一条与之对应的delte语句
- 当update一条记录时,undo log 会记录一条相反的update语句
ACID:
A(Atomicity) 原子性
C(Consistency)一致性
I(Isolation)隔离性
D(Durability)持久性
binlog redolog
- Binlog是Server层的数据 主要做Mysql 功能层面的事情
- 与redo 日志的区别
- redo 是innodb独有的 binlog是所有引擎都可以使用的
- redo是物理日志 记录的是在某个数据页上做了什么修改,
binlog是逻辑日志 记录的是这个语句的原始逻辑 - redo是循环写的 空间会用完,binlog是可以追加的,不会覆盖之前的日志信息
- 数据更新流程
1. 执行器先从引擎中找到数据 如果在内存中就直接返回 如果不在内存就查询后返回2. 执行器拿到数据后先修改 然后调用引擎接口重新吸入数据3. 引擎将数据更新到内存 同时写入redo log 此时处于prepare阶段 并通知执行器完成,随时可以操作4. 执行器将操作写入binlog5. 执行器调用存储引擎的事物提交接口, 引擎把刚刚写完的redo 改成commit状态 更新完成。 注意:1. 先写redo log 再写binlog redo log写完了 binlog没写呢 服务器断电了 重启之后redo log 恢复数据与binlog对不上 2. 先写binlog 也是一样
知识点
set @t1 = 0;select @t1; --> 0 set @t2:=3;select @t2 ; -->3
标签:binlog,非礼,log,数据,写入,m07,引擎,mysql,redo 来源: https://blog.51cto.com/u_12198094/2705770