美文网首页
01MySQL体系结构与存储引擎

01MySQL体系结构与存储引擎

作者: owen_he | 来源:发表于2020-09-26 21:30 被阅读0次

    内容介绍

    本节会分享MySQL 体系结构与存储引擎,包括 MySQL 数据库的体系结构、MySQL 支持的存储引擎,InnoDB 能够取代 MyISAM 的原因和 InnoDB 几大核心特性、 MySQL 5.7 版本和 MySQL 8.0 版本做了哪些优化和改进。

    MySQL 数据库的体系结构

    MySQL 数据库的体系结构,如下图所示


    1.png

    MySQL 体系结构由 Client Connectors 层、MySQL Server 层及存储引擎层组成。

    • Client Connectors 层
      负责处理客户端的连接请求,与客户端创建连接。目前 MySQL 几乎支持所有的连接类型,例如常见的 JDBC。
    • MySQL Server 层
      主要包括 Connection Pool、Service & utilities、SQL interface、Parser解析器、Optimizer 查询优化器、Caches 缓存等模块。
      1、Connection Pool,负责处理和存储数据库与客户端创建的连接,一个线程负责管理一个连接。
      2、Service & utilities 是管理服务&工具集,包括备份恢复、安全管理、集群管理服务和工具。
      3、SQL interface,负责接收客户端发送的各种 SQL 语句,比如 DML、DDL 和存储过程等。Parser 解析器会对 SQL 语句进行语法解析生成解析树。
      4、Optimizer 查询优化器会根据解析树生成执行计划,并选择合适的索引,然后按照执行计划执行 SQL 语言并与各个存储引擎交互。
      5、Caches 缓存包括各个存储引擎的缓存部分,比如:InnoDB 存储的 Buffer Pool、MyISAM 存储引擎的 key buffer 等,Caches 中也会缓存一些权限,也包括一些 Session 级别的缓存。
    • 存储引擎层 包括 MyISAM、InnoDB,以及支持归档的 Archive 和内存的 Memory 等。MySQL是插件式的存储引擎,只要正确定义与 MySQL Server 交互的接口,任何引擎都可以访问MySQL,这也是 MySQL 流行的原因之一。存储引擎底部是物理存储层,是文件的物理存储层,包括二进制日志、数据文件、错误日志、慢查询日志、全日志、redo/undo 日志等。

    用一条 SQL SELECT 语句的执行轨迹来说明客户端与 MySQL 的交互过程,如下图所示。


    2.png

    1、通过客户端/服务器通信协议与 MySQL 建立连接。
    2、查询缓存,这是 MySQL 的一个可优化查询的地方,如果开启了 Query Cache 且在查询缓存过程中查询到完全相同的 SQL 语句,则将查询结果直接返回给客户端;如果没有开启Query Cache 或者没有查询到完全相同的 SQL 语句则会由解析器进行语法语义解析,并生成解析树。
    3、预处理器生成新的解析树。
    4、查询优化器生成执行计划。
    5、查询执行引擎执行 SQL 语句,此时查询执行引擎会根据 SQL 语句中表的存储引擎类型,以及对应的 API 接口与底层存储引擎缓存或者物理文件的交互情况,得到查询结果,由MySQL Server 过滤后将查询结果缓存并返回给客户端。若开启了 Query Cache,这时也会将SQL 语句和结果完整地保存到 Query Cache 中,以后若有相同的 SQL 语句执行则直接返回结果。

    存储引擎概述

    存储引擎是 MySQL 中具体与文件打交道的子系统,它是根据 MySQL AB 公司提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫作存储引擎,常用的存储引擎MyISAM、支持事务的 InnoDB、内存类型的 Memory、归档类型的 Archive、列式存储的 Infobright等。

    在 MySQL 5.6 版本之前,默认的存储引擎都是 MyISAM,但 5.6 版本以后默认的存储引擎就是 InnoDB 了。

    InnoDB 存储引擎的具体架构主要有是实例层(计算层),位于内
    位于内存中,和是物理层,位于文件系统中。

    新版本特性

    这里主要讲解一下 MySQL 5.7 版本和 8.0 版本的一些新特点。

    • MySQL 5.7 版本新特性如下:
      1、将 Undo 从共享表空间 ibdata 文件中分离出来,可以在安装 2、MySQL 时由用户自行指定文件大小和数量。
      增加了 temporary 临时表空间,里面存储着临时表或临时查询结果集的数据。
      3、Buffer Pool 大小可以动态修改,无需重启数据库实例,这是 DBA 的福音。
    • MySQL 8.0 版本新特性如下:
      1、将 InnoDB 表的数据字典和 Undo 都从共享表空间 ibdata 中彻底分离出来了,以前需要ibdata 文件中数据字典与独立表空间 ibd 文件中数据字典一致才行,8.0 版本就不需要了。
      2、temporary 临时表空间也可以配置多个物理文件,而且均为 InnoDB 存储引擎并能创建索引,这样加快了处理的速度。
      3、用户可以像 Oracle 数据库那样设置一些表空间,每个表空间对应多个物理文件,每个表空间可以给多个表使用,但一个表只能存储在一个表空间中。
      InnoDB 和 MyISAM
      这里对比几个主流的存储引擎,如下图所示。从图中可以详细看到 InnoDB 和 MyISAM 的对比。
    InnoDB 和 MyISAM
    • 功能对比

    InnoDB 和 MyISAM 的功能对比如下图所示。


    3.png

    1、InnoDB 支持 ACID 的事务 4 个特性,而 MyISAM 不支持;
    2、InnoDB 支持 4 种事务隔离级别,默认是可重复读 Repeatable Read 的,MyISAM 不支持;
    3、InnoDB 支持 crash 安全恢复,MyISAM 不支持;
    4、InnoDB 支持外键,MyISAM 不支持;
    5、InnoDB 支持行级别的锁粒度,MyISAM 不支持,只支持表级别的锁粒度;
    6、InnoDB 支持 MVCC,MyISAM 不支持;

    InnoDB 表最大还可以支持 64TB,支持聚簇索引、支持压缩数据存储,支持数据加密,支持查询/索引/数据高速缓存,支持自适应hash索引、空间索引,支持热备份和恢复等。

    • 性能对比
      在性能对比上,InnoDB 也完胜 MyISAM,如下图所示。


      4.png

    1、读写混合模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长,
    2、在测试用例里,最高可达近 9000 的 TPS,但 MyISAM 因为读写不能并发,它的处理能力跟核数没关系,呈一条水平线,TPS 低于 500。
    3、只读模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长,最高可达近 14000 的 TPS,但 MyISAM 的处理能力不到 3000 TPS。

    InnoDB 存储引擎

    • 核心特性

    InnoDB 存储引擎的核心特性包括:MVCC、锁、锁算法和分类、事务、表空间和数据页、内存线程以及状态查询。

    • ARIES 三原则
      ARIES 三原则,是指 Write Ahead Logging(WAL)。
      1、先写日志后写磁盘,日志成功写入后事务就不会丢失,后续由 checkpoint 机制来保证磁盘物理文件与 Redo 日志达到一致性;
      2、利用 Redo 记录变更后的数据,即 Redo 记录事务数据变更后的值;
      3、利用 Undo 记录变更前的数据,即 Undo 记录事务数据变更前的值,用于回滚和其他事务多版本读。
      show engine innodb status\G 的结果里面有详细的 InnoDB 运行态信息,分段记录的,包括内存、线程、信号、锁、事务等,请你多多使用,出现问题时从中能分析出具体原因和解决方案。

    总结回顾

    5.png

    相关文章

      网友评论

          本文标题:01MySQL体系结构与存储引擎

          本文链接:https://www.haomeiwen.com/subject/zushuktx.html