超详细的MySQL工作原理 体系结构

了解MySQL(超详细的MySQL工作原理 体系结构)

  • 1.MySQL体系结构
  • 2.MySQL内存结构
  • 3.MySQL文件结构
  • 4.innodb体系结构一、了解MySQL前你需要知道的引擎是什么:MySQL中的数据用各种不同的技术存储在文件(或者内存)中 。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力 。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能 。当我们理解了引擎这个概念,自然而然就知道引擎层的作用就提供各种不同引擎给你选择,然后用你选出来的引擎去处理sql语句二、MySQL体系结构MySQL 最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理 (Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离 。这种 处理和存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储 的方式 。

超详细的MySQL工作原理 体系结构

文章插图
 
由图,可以看出MySQL最上层是连接组件 。下面服务器是由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成 。
  • 用户:进行数据库连接的人 。
  • 支持接口:是第三方语言提供和数据库连接的接口,常见的有jdbc,odbc,c的标准api函数等等 。
  • 管理工具和服务:系统管理和控制工具,例如备份恢复、Mysql复制、集群等(见图)
  • 连接层:提供与用户的连接服务,用于验证登录服务 。
—> 连接池:由于每次建立建立需要消耗很多时间,连接池的作用就是将这些连接缓存下来,下次可以直接用已经建立好的连接,提升服务器性能 。
  • 服务层:完成大多数的核心服务功能 。有sql接口,解析器parser,优化器optimizer,查询缓存 cache/buffer。
? —>SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果 。比如select * from就是调用SQL Interface
? —>解析器: SQL命令传递到解析器的时候会被解析器验证和解析 。解析器是由Lex和YACC实现的,是一个很长的脚本 。其功能是:
a.将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的 。
? b.如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的 。
? —>优化器:查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化 。他使用的是“选取-投影-联接”策略进行查询 。举一个例子:
select * from users where uname='admin';1.这个select查询先根据where语句进行选取,而不是先将表全部查询出来以后再进行uname过滤 。(选取)
? 2.这个select查询先根据*进行属性投影,而不是将属性全部取出以后再进行过滤 。(投影)
? 3.将这两个查询条件联接起来生成最终查询结果 。(联接)
? —>缓存器: 查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据 。通过LRU算法将数据的冷端溢出,未来得及时刷新到磁盘的数据页,叫脏页 。这个缓存机制是由一系列小缓存组成的 。比如表缓存,记录缓存,key缓存,权限缓存等
? 简而言之,服务层执行过程:sql语句通过sql接口,服务器如果缓存cache有命中查询结果,直接读取数据 。如果没有命中查询结果,由解析器进行sql语句的解析,预处理,经过优化器进行优化后提交给引擎层 。通俗地说—>服务层告诉引擎层要做什么 。