MySQL 可以分为 Server 层和存储引擎层两部分。
不同的存储引擎共用一个 Server 层
image.png
查看链接
show processlist
长链接占用内存较大所以 mysql_reset_connection 初始化长链接
缓存问题
不建议使用mysql缓存,性能问题较大
配置中 query_cache_type 设置成 DEMAND 取消缓存
分析器
- 识别关键字
- 语法分析
优化器
识别使用join 表查询方式或者使用哪个索引
执行器
判断表是否有查询权限,一条一条查询执行
redoLog (重做日志)
- innodb 特有的日志 (引擎层的日志)
- 固定大小 一个文件1G 4个文件就是4G
- 依靠redoLog 异常重启保持数据不丢失叫做 crash-safe
- 数据页修改了什么 物理日志
- 循环写,覆盖写
binlog (归档日志)
- 所有引擎层都可以有binlog
- 语句的原始逻辑 逻辑日志
- 追加写 不覆盖
执行update 语句
image.png- redoLog 两阶段提交保证两份数据的一致性
- 1.redoLog Prepare 2.binLog 3.redoLog commit 如果2->3 阶段崩溃,则数据库恢复因为有binlog,redoLog会自动提交。
网友评论