暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的组件及InnoDB存储引擎

BanzClub 2019-08-23
188

MySQL的组件及InnoDB存储引擎简介



在《MySQL的体系结构》一文中,说互联网应用的数据是数据库的数据,这种是说法不够严谨的,其实对于网站来说所有的信息都可以看成是数据,包括图片、文本、文档、音视频等,这些数据按照存储分类可以分为非结构化数据、结构化数据、半结构化数据。
如互联网应用都需要存储大量的图片、视频、静态文件等非结构化数据,这类数据以文件形式存在,对象之间没有关联。
结构化数据一般存储在关系型数据库中,可以用二维关系表结构来表示,即上文提到的订单、用户等数据,这类数据的模式(属性、类型、数据之间的联系)和内容是分开的,数据的模式需要预先定义,数据的内容以行为单位。
半结构化数据结构化数据的一种形式,它并不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,HTML、XML就属于半结构化数据,通常是自描述的。与结构化数据最大的区别是,半结构化数据的模式结构和内容混在一起,也不需要预先定义数据的模式结构。
目前,互联网应用对于非结构化数据一般是使用分布式文件系统来存储此类文件,如:TFS、GFS、Ceph、Swift等。对于结构化数据通常使用关系型数据库来存储,如:MySQL、Oracle等,上一篇已经大概介绍了MySQL的体系结构,这篇主要讲一下MySQL各个组件的作用。

那么,SQL语句在MySQL中是怎么执行流程的呢?可以总结为以下步骤:

  • 连接器

在使用数据库之前,得需要先连接到数据库,这就用到了连接器,连接器主要功能包括连接建立、管理、维持,获取权限等。
通常都是使用数据库用户名、密码连接到指定IP、端口的数据库实例;
在应用与数据库服务器之间的连接通常采用长连接,当一次事务执行时,不需要重新创建连接,而是直接复用已存在的连接,另外创建连接需要消耗系统资源(如:为连接的堆栈分配系统内存),所以连接的数量并不是无限的。

引申阅读:长连接与短连接

张帆,公众号:菜鸟奋斗史长连接和短连接详细解析
  • 查询缓存

如果是查询语句,MySQL会先到查询缓存看看,如果命中,直接返回;如果,没有命中,则继续向下执行。所以,命中缓存的查询语句,响应很快。但查询缓存,并不是有万利而无害的,当更新语句,执行时,会清空所有关联的缓存。对于频繁更新的表,查询缓存命中率会非常低,建议关闭查询缓存。查询缓存应该使用在读多写少场景,例如,某些很少更改的配置表场景。

  • 分析器

MySQL使用分析器对SQL语句进行词法分析、语法分析,通过分析来解析关键字,如:Select;解析操作的表、字段、列值等。当遇到语法错误时,MySQL会返回“You have an error in your SQL syntax”的错误提醒。
  • 优化器
分析器解析完SQL语句之后,MySQL会通过优化器来决定,这条SQL语句需要使用哪个索引等。
  • 执行器
进入执行器后,在开始执行SQL语句前,会先判断表的权限,如果没有则报错。所以,MySQL会两次判断权限,一次是连接器,一次是执行器。
在通过权限验证后,就会根据表的引擎,去调用具体引擎提供的接口。
  • 存储引擎
MySQL的存储引擎是插件式的,从MySQL 5.5版本开始,MySQL默认的存储引擎是InnoDB。InnoDB支持ACID事务,行锁设计,支持MVCC,提供类似于Oracle风格的一致性非锁定读,另外,从实现上,更加有效的利用内存和CPU,提升MySQL的性能。除了这些功能外,还包括一系列机制保证故障恢复,主备切换等。


在工作中,目前最常用的存储引擎,也是InnoDB。后续将结合工作积累,继续深入学习InnoDB的各种特性,目前做一个简单的分类:


1、《InnoDB In-Memory Structures And On-Disk Structures

2、《InnoDB 索引与锁

3、《InnoDB 事务

4、《高性能与高可用性能之插入缓存、二次写、自适应哈希索引、预读

5、《故障恢复与WAL机制




  1. 《大规模分布式存储系统-原理解析与架构实践》

  2. https://dev.mysql.com/doc/refman/5.5/en/programs-overview.html

  3. 极客时间-《MySQL实战45讲》林晓彬

  4. 《MySQL技术内幕:InnoDB存储引擎》

<>

文章转载自BanzClub,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论