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存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见 ...
随机推荐
- 解决WIN7下pl/sql连接弹出空白提示框问题
问题描述: win7 32位系统,已安装oracle10.0开发客户端,已配置数据库, 登陆pl/sql时出现空白提示框问题,尝试重装oracle无果,于是上网查找解决方法,逐步尝试,终于把客户端弄好 ...
- CV入坑
https://www.cnblogs.com/fldev/p/14360149.html
- Linux远程挂载目录
Linun远程挂载文件目录 需求:有两台服务器,一个是nginx,一台服务器是weblogic,图片上传到weblogic服务器上,但是需要nginx做代理,可是nginx访问不到weblogic服务 ...
- C# .netCore 上传文件到ftps/ftp
白码一号的博客园 最近由于项目安全需要,将之前的ftp上传文件的方式,改用ftps 因为不太了解这个东西便开始了踩坑之旅 首先,最近在ubuntu 上搭建了这个服务 流程可以参考这些博客(部署网上的资 ...
- 【javascript】关于charCodeAt()方法
在做算法题目leetcode 2283时,看见某些答案会使用charCodeAt(),因为自己没用过,所以作此纪录 描述在 JavaScript 中,charCodeAt() 是一种字符串方法,用于检 ...
- element-ui el-tree 内容过多出现横向滚动条
/deep/ .el-tree>.el-tree-node { display: inline-block; min-width: 100%;}
- ajax缓存和fiddler——http协议调试代理工具
1.在ie9下,ajax请求可能会有缓存,需要在请求上一个随机数 如:Math.random(); 2.fiddler2 打开以后可以查看所有的http请求情况,也可以使用本地脚本代替要请求的js文件 ...
- Qt 学习笔记 - 第五章 - Qt 时间编程 - Qt 时钟
原文地址:Qt 学习笔记 - 第五章 - Qt 时间编程 - Qt 时钟 Qt 学习笔记全系列传送门: Qt 学习笔记 - 第一章 - 快速开始.信号与槽 Qt 学习笔记 - 第二章 - 添加图片.布 ...
- Centos7 设置定时任务
Centos7 设置定时任务 在centos上最常用的定时任务应该就是crontab了,在经过各种度娘之后有三种方式实现定时任务的方法,但是所用到的场景有所不同 at 适合仅执行一次就结束的调度命令, ...
- Python Web开发初试,基于Flask
目录 关于web框架 Python flask使用 关于web框架 仅仅对于应用层的coder而言,web框架的使用其实就是写路由,分发路由,写输出.当然如果要安全,要测试,要写优秀的接口,那需要继续 ...