MySql逻辑架构及工作流程


MySQL并不完美,但是却足够灵活,能够适应高要求的环境。同事,Mysql既可以嵌入到应用程序中,也可以支持数据仓库、内容索引和部署臁、高可用的冗余胸痛、在线事务处理系统等各种应用类型。
为了更好的理解mysql服务器,我们需要理解mysql各不见之间如何协同工作。徐奥我们去理解它的逻辑架构。下面我们就介绍与喜爱Mysql的逻辑架构

转自:https://blog.csdn.net/z_ryan/article/details/82260663

MySql的逻辑架构

Mysql的最重要、最狱中不同的特性就是它的存储引擎框架,这种架构将查询处理以及其他系统任务和数据的存储/提取相分离。所带来的好处就是可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式;
下面是MySql的逻辑架构图:

在这里插入图片描述
Mysql架构总共三层,在上图中以虚线作为划分;
首先:最上层的服务并不是Mysql独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理,授权认证,安全等;
第二层的架构包括大多数的MySql的核心服务。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数)。同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、试图等;
第三层包含了存储引擎。存储引擎负责MySql中数据的存储和提取。服务器通过API和存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明化。存储引擎API包含十几个底层函数,用于执行“开始一个事务”等操作。但是存储引擎一般不会去解析SQL(InnoDB会解析外键定义,因为本身没有实现该功能),不同存储引擎之间也不会相互通信,而只是简单的响应上层的服务器请求;

MySql系统架构图

看完上图后,大家是不是觉得MySql的系统架构挺简单的?其实不然。上图只是MySql系统架构的大的模块图,其实每一层的结构都相当复杂,下面就是详细模块图;
在这里插入图片描述

  1. Connectors:
    指的是不同语言中与SQL交互。
  2. Connection Pool:
    管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对MySql Server的各种请求,接受连接请求,转发所有连接请求到线程管理模块。每个连接上Mysql Server的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责Mysql Server与客户端的通信,接受客户端的命令请求,传递Server段的结果信息等。线程管理模块负责管理维护这些连接线程。包括线程的创建,线程的cache等。
  3. ** Management Services&Utilities:**
    系统管理和控制工具。
  4. SQL Interface:
    接受用户的SLQ命令,并返回用户需要查询的结果;
  5. Parser:
    SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。在MySql中我们习惯将所有Client端发送给Server段的命令都程为Query,在MySql Server里面,连接线程接收到客户端的一个Query后,会直接将该Query传递给专门负责将各种Query继续进行分类然后转发给各个对应的处理模块。
    主要功能:
    1)、将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后sql传递和处理就是基于这个结构的;
    2)、如果分解构成中遇到错误,那么就说明这个sql是不合理的;
  6. Optimizer(优化):
    查询优化器:SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端七年跪求Query,根据客户端请求的query语句和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最后的策略,告诉后面的程序如何取得这个query语句的结果;
    使用的是“选取-投影-联结”策略进行查询;
    用一个例子就可以理解:select uid,name from user where gender = 1;
    这个select查询先根据where 语句进行选取,而不是先将表全部拆线呢出来以后再进行gender过滤;然后根据uid和name进行属性投影,而不是将属性全部取出来再进行过滤。最后将这两个查询条件链接起来生成最终查询结果;
  7. Cache和Buffer:
    查询缓存:主要功能是将客户端提交给Mysql 的select 类query请求的返回结果集cache到内存中,与该query的一个hash值做一个对应。该query所去数据的基表发生任何数据变化之后,mysql会自动使该query的cache失效。在读写比例非常高的应用系统中,Query cache对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。
    如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等;
  8. 存储引擎接口:
    MySql区别于其他数据库的最重要的特点就是其插件式的表存储引擎。Mysql插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必须的,如SLQ分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发这都可以按照自己的医院来进行开发。
    注意:存储引擎是基于表的,而不是基于数据库的。

数据库的工作流程;

相信通过上述的介绍,大家对Mysql的逻辑架构已经有了一定的了解,下面我们来介绍一下数据库具体的工作流程,先来看一张图:
在这里插入图片描述
在这里,我曾数据库架构的三个层面分别介绍数据的工作流程:
最上层:客户端连接

  1. 连接处理:客户端同数据库服务建立TCP连接,连接管理模块会建立连接,并请求一个连接线程。如果连接池中有空闲的连接线程,则分配给这个连接,如果没有,在没有超过最大连接数的情况下,创建新的连接线程负责这个客户端。
  2. 授权认证:在真正的操作之前,还需要调用用户模块进行授权检查,来验证用户是否有权限。通过后,方才提供服务,连接线程开始接受并处理来自客户端的sql语句。
    第二层:核心服务
  3. 连接线程接收到SQL语句之后,将语句交给SQL语句解析模块进行语法分析和语义分析。
  4. 如果是一个查询语句,则先根据hash值查看缓存中是否有结果,如果有结果则可以直接返回给客户端;
  5. 如果查询缓存中没有结果,就需要真的插叙数据库引擎层了,于是发给sql优化器,进行查询的优化。如果是表变更,则分别交给insert、update、delete、create、alter处理模块进行处理。
    第三层:数据库引擎层
  6. 先打开表,如果需要的话,获取相应的锁。
  7. 先查询缓存页中有没有相应的数据,如果有则可以直接返回,如果没有就要从磁盘上去读取。
  8. 当在磁盘中找到相应的数据之后,则会加载到缓存中来,从而使得后面的查询更加高效,由于内存有限,多采用变通的LRU表来管理缓存页,保证缓存的都是经常访问的数据。
  9. 最后,获取数据返回给客户端,关闭连接,释放连接线程。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值