MySQL-存储引擎架构
MySQL是一种分层体系结构的关系数据库。
一共有三层:客户(连接)层,Server层,存储引擎层。
简单理解就是这三层架构。官网的解释在这里。(这个部分建议看8.0的文档,8.0文档补充了架构图,5.7没有放图)

如上图所示(请记住各层的上下顺序,比如索引下推概念中的下推pushdown指的就是server层处理的where下推到存储引擎层):
客户(连接)层:负责连接处理,验证,安全
Server层:核心层,负责 连接线程处理,NoSQL接口,SQL接口,解析器,优化器,缓存
存储引擎层:各种可插拔替换的存储引擎,如InnoDB,MyISAM,Memory等
主要需要关注Server层和存储引擎层的分工不同:
Server层负责--所有跨存储引擎层的通用功能,如各种接口,存储过程,视图,触发器,SQL语句操作等等
存储引擎层负责--为数据库执行实际的IO操作
**Server层的binlog
开启binlog

同时要设置日志记录格式,参考

查看binlog是否启用:
show variables like 'log_%';

SHOW BINARY LOGS; 列出二进制文件。参考

使用mysqlbinlog查看binlog文件:
mysqlbinlog --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000001

可以看到binlog中记录了每一个操作的sql语句。
**Server层的查询缓存
查询缓存在8.0被取消,因为在一个频繁更新的表中,查询缓存命中率极低。另外它的扩展性问题也是瓶颈所在。
存储引擎层:
在InnoDB磁盘结构一篇中有大致描述Disk Stuctures。关于Memory Structures中则主要是Buffer Pool以及自适应哈希索引。
存储引擎-InnoDB架构,图片来源

Buffer Pool:内存结构中的操作缓冲池,数据在刷盘前的缓冲阵地,提高读写性能。注意,它是直接操作磁盘页结构前的一个内存缓冲,
里面一样是管理的页结构。由于不是实时刷盘,数据在内存中有丢失的风险,因此才引入了redo log机制。
Buffer Pool也是mysql调优的一个重要部分。

由于Buffer Pool的内存大小是有限的,不可能缓存所有的数据页。应该缓存一些频繁操作的“热数据”,同时清理冷却数据,这就涉及到空间管理。
如何判断及取出磁盘页中的热数据呢?
使用了改进的LRU(Least Recently Used)算法 ,将LRU链表的数据做冷热区域划分。具体参考。
**redo log
上文已经介绍了redo log被引出的背景:我们日常操作sql直接操作的其实是innodb的buffer pool,为了保证buffer pool的数据不丢失, 引入了redo log。
redo log恢复内存中未完成的事务/提交,binlog恢复数据库完整记录。仅凭binlog,可能存在丢失未刷盘事务数据的情况,所以mysql不建议删除redo log并直接使用binlog来
恢复数据库。同时恢复数据库时,redo log的操作部分是完全自动的不需要人为介入。
**undo log
undo log是事务开始前将数据状态进行记录,方便进行数据回滚。用来保证事务的原子性(事务过程全部成功/全部失败,借助undo log可以恢复数据到原始状态)。
扩展问题
**为什么存储引擎基于表而不是基于数据库
在InnoDB磁盘结构这一章中,我们知道一个数据库由许多表组成,表即是InnoDB的tablespace。
表空间与数据库到底是什么关系??有人说存储引擎是基于表的,我们也知道InnoDB里一大堆的tablespace。
但是数据库呢?数据库和它对应在InnoDB物理文件中又是什么?
从mysql服务器物理文件上看,数据库就是对应了一个文件夹,表对应了具体的文件(innodb==》.frm,.ibd)。
创建数据库官方解释:MySQL 中的数据库被实现为包含与数据库中的表相对应的文件的目录。因为最初创建数据库时没有表,所以该Create database语句只在MySQL数据目录下创建一个目录。
MySQL-存储引擎架构的更多相关文章
- MySQL的多存储引擎架构
支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将 ...
- MySql的多存储引擎架构, 默认的引擎InnoDB与 MYISAM的区别(滴滴)
1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...
- MySQL性能调优与架构设计——第3章 MySQL存储引擎简介
第3章 MySQL存储引擎简介 3.1 MySQL 存储引擎概述 MyISAM存储引擎是MySQL默认的存储引擎,也是目前MySQL使用最为广泛的存储引擎之一.他的前身就是我们在MySQL发展历程中所 ...
- MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎
文章目录 Mysql逻辑架构介绍 总体概览 总体概览 mysql存储引擎 查看命令 看你的 mysql 现在已提供什么存储引擎 : 看你的 mysql 当前默认的存储引擎 : 各个引擎简介 MyISA ...
- MySQL存储引擎之Myisam和Innodb总结性梳理
Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始 ...
- 【转】mysql存储引擎
http://www.cnblogs.com/kevingrace/p/5685355.html Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 MyISAM In ...
- 第 3 章 MySQL 存储引擎简介
第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...
- Mysql存储引擎__笔记
Mysql存储引擎(表类型): Mysql数据库: 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以使存储器上一些文件的集合或者一些内存 数据的内存数据的集合. Mysql数据库是开放源代 ...
- MySQL存储引擎差异化实验
本篇把MySQL最常用的存储引擎给大家做一个介绍,然后通过插入.修改和并发实验来了解和验证一下它们之间的一些差异. 一.MySQL存储引擎简介 存储引擎在MySQL结构里占据核心的位置,是上层抽象接口 ...
- 浅谈MySQL存储引擎-InnoDB&MyISAM
存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见 ...
随机推荐
- IT工具知识-11:一种安卓投屏到Win10失败的解决方法
软硬件平台 电脑:WIN10 LTSC 手机:红米K30Pro/MIUI 11.0.26 投屏软件:安卓端-自带投屏,WIN10-自带投屏(连接) 故障描述 之前还能用的,但是在换了个路由器之后就不能 ...
- 初学,Markdown的使用
Markdown学习 一级标题:"#"+空格+"标题" 二级标题 二级标题:"##"+空格+"标题" 三级标题 三级标题 ...
- geom_smooth trasparent alpha 透明度
stat_smooth (geom="line", alpha=0.3, size=3, span=0.5) + geom_line(stat="smooth" ...
- OpenStack组件说明
1.版本对应组件 2.Juno版本的核心组件
- vlan概述
一.vlan是什么? vlan顾名思义就是虚拟局域网Virtual Local Area Network,为什么要划分vlan?划分vlan可以控制广播,增强网络安全性,简化网络管理. 二.vlan的 ...
- [rk3568][buildroot] 移除RK3568 iodomain check
1. 问题背景 RK3568 基线代码默认会起一个服务监控RK3568 iodomain,该服务间隔性输出log信息: 由于该功能非必要,故选择移除该部分逻辑 2.解决方案 查看源码编译脚本,如下图所 ...
- Rosetta scoring
参考:https://www.rosettacommons.org/demos/latest/tutorials/scoring/scoring 介绍 Rosetta有一个被称为ref2015的优化能 ...
- JS兼容问题总结
JS兼容问题总结 "标准浏览器"和"低版本浏览器(IE)"兼容写法 一.浏览器卷去的高度和宽度 var scrollTop = document.documen ...
- Why WebRTC|“浅入深出”的工作原理详解
前言 近几年实时音视频通信应用呈现出了大爆发的趋势.在这些实时通信技术的背后,有一项不得不提的技术--WebRTC. 今年 1 月,WebRTC 被 W3C 和 IETF 发布为正式标准.据调研机构 ...
- Monkey二次开发 -- Monkey jar包构建
前面已经下载好了Android源码,可以在对应目录下构建二次开发后的monkey jar包了: 当前环境:Ubuntu16.04,Andorid10源码. 1.初始化环境 cd进入andr ...