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存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见 ...
随机推荐
- 【Unity】使用dmp文件定位Player崩溃原因
写在前面 如果在Player运行时突然崩溃,仅靠Player.log日志文件不能定位引起崩溃的代码,那么可以尝试利用dmp(仅限Windows平台)文件定位崩溃原因. 正文 环境 Unity 2020 ...
- .NET 5 WPF 配置文件变动 程序自动刷新 (reloadOnChange)
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extens ...
- Sql Server函数全解
--系统函数 create database sample_db; use sample_db; create table student ( i_sid int primary key identi ...
- WPF dxe:ComboBoxEdit 选择项后并可编辑值
有个需要,在ComboBoxEdit中选择多个值,并且要求可以直接在后面添加新的值. 开始的时候绑定列表,设置DisplayMember,不能修改. 然后绑定List<string>,不设 ...
- Ubuntu 22.04 安装 VMWare 16.2.3 后无法启动
异常日志: 2022-06-13T03:49:56.019Z In(05) host-29676 In file included from /tmp/modconfig-XR2GVI/vmmon-o ...
- idea plugins搜不出来东西
今天学习Vue要安装一个Vue.js的插件,在idea的plugins上搜死活搜不出来,参照了网上的关防火墙,勾选什么auto什么的选项还是不管用,最后瞎捣鼓弄好了,在博客上记录一下. 打开手机数据( ...
- pycharm安装包的简便方法
- 内存取证 volatility的使用
volatility 简介: volatility(挖楼推了推) 是一个开源的框架,能够对导出的内存镜像进行分析,能够通过获取内核的数据结构,使用插件获取内存的详细情况和运行状态,同时可以直接dump ...
- 关于IDEA发出基于APR的本地库加载失败错误的解决------->求解决!
问题描述 在没有使用Maven项目启动该Project时,Tomcat可以正常使用,但在这里会显示这样的错误: 这个错误,已经查了两天了,相关文件以及解决方法已经翻烂了,还没有解决,放出来集思广益一下 ...
- Javaweb基础复习------JSON相关知识
JSON(JavaScript对象表示法) 首先,我们需要知道的是,要使用json语法的话,就需要在Maven项目中导入相关的包,可以参考我之前发过的那个Maven导包那个网址,在里面找到这个页面: ...