mysql优化 个人笔记 非礼勿扰 -m07

Mysql基本架构图

在这里插入图片描述

  • 两种优化方式
    RBO 基于规则优化
    CBO 基于成本优化 这个用的多

Mysql 日志

1. binlog (server)
数据库data目录下的binlog文件
在这里插入图片描述

show VARIABLES like '%binlog%' 

在这里插入图片描述
binary log

恢复数据过程

  1. 找到最近的一次全量备份数据
  2. 从备份的时间点开始,将备份的binlog取出来,重放到恢复的那个时刻

2. redolog (存储引擎 innodb)
数据库data目录下有这俩文件
在这里插入图片描述

  • 当发生数据修改时,innodb存储引擎会将记录下入到redo log中,并更新
    内存,此时更新就算完成了,同时innodb引擎会在何时的时机将记录写入到磁盘中
    在这里插入图片描述
  • redo log是固定大小的 是循环写入的
    在这里插入图片描述
    • 有了redo log后 innodb就可以保证即使数据库发生异常重启,之前的记录也不会丢失 叫做 crash-safe
  • wal write ahead log
    数据写入的时候 不是直接写入磁盘 而是先写入内存 合适时机才会写入磁盘
    写入性能上感觉是提升了
  • 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 日志的区别
    1. redo 是innodb独有的 binlog是所有引擎都可以使用的
    2. redo是物理日志 记录的是在某个数据页上做了什么修改,
      binlog是逻辑日志 记录的是这个语句的原始逻辑
    3. redo是循环写的 空间会用完,binlog是可以追加的,不会覆盖之前的日志信息
    4. 数据更新流程
      在这里插入图片描述
1. 执行器先从引擎中找到数据
   如果在内存中就直接返回
   如果不在内存就查询后返回
2. 执行器拿到数据后先修改  
   然后调用引擎接口重新吸入数据
3. 引擎将数据更新到内存 同时写入redo log
	此时处于prepare阶段
	并通知执行器完成,随时可以操作
4. 执行器将操作写入binlog
5. 执行器调用存储引擎的事物提交接口,
	引擎把刚刚写完的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
发布了431 篇原创文章 · 获赞 91 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/qq_36291682/article/details/105611167