MySQL逻辑架构和执行流程(一)

2024-09-07 10:58

本文主要是介绍MySQL逻辑架构和执行流程(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MySQL逻辑架构和执行流程

  • MySQL
    • 逻辑架构图
      • 第一层(连接层)
      • 第二层(核心服务层)
      • 第三层(存储引擎)
    • 各组件详细介绍
      • Connectors
      • Connection Pool
      • SQL_Interface
      • Parser解析器
      • Optimizer优化器
      • Cache和Buffer缓存
      • Engine存储引擎
    • 执行流程

MySQL

逻辑架构图

在这里插入图片描述

第一层(连接层)

连接层不是MYSQL架构特有的,基本上基于网络的客户端/服务端都存在类似架构,用于处理连接、授权、安全处理等

第二层(核心服务层)

MYSQL大多数核心服务功能都在这一层,包括权限认证、语法解析、优化、缓存以及所有内置函数和存储过程、试图、触发器等;通过explain可以了解MySQL优化策略,提供一个参考基准.

第三层(存储引擎)

MYSQL支持多种存储引擎,目前常用的是InnoDB,支持事务和行级锁、间隙锁。存储引擎负责数据存储和提取,服务器通过API与之交互,API屏蔽了不同存储引擎的差异性,使得上层查询变得透明;

各组件详细介绍

Connectors

提供了多种语言的连接方式API接口,比如java基于jdbc连接.

Connection Pool

每个客户端连接都会在服务端拥有一个线程,MySQL提供线程池缓存这些线程,以便不用每次都创建和销毁线程,达到线程池数量则新建线程,一个线程可以服务多个连接.

SQL_Interface

接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

Parser解析器

将接收到的SQL进行语法和语义分析,创建内部数据结构(解析树),根据不同的操作类型进行后续不同的处理逻辑,解析器出错说明SQL语法不正确。

Optimizer优化器

针对接收的SQL语句,进行各种优化,包括重写查询、决定表的读取顺序、选择合适的索引等。

Cache和Buffer缓存

MySQL针对查询的结果进行缓存,通过query的hash值做映射,在缓存命中率比较高的情况下,可以极大提高性能。
如果缓存利用率不高,不建议开启缓存,会影响读写性能
1.缓存的开启,需要内存的消耗
2.query操作需要先查询缓存,同时还会写缓存
3.sql进行更新,需要清空相应表的缓存数据

Engine存储引擎

基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。

MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。
注意:存储引擎是基于表的,而不是数据库。最常用的就是InnoDB、MyISAM

执行流程

  1. 客户端和服务端建立TCP连接,分配线程管理连接,会优先使用线程池可用线程,无可用线程则新建线程处理请求。同时进行授权认证,连接是否有权限执行相应权限
  2. 查询缓存是否命中,命中则直接返回结果,否则进行语法解析
  3. 语法解析进行语法和语义分析,建立内部数据结构,根据不同操作类型进行不同处理
  4. 查询优化器,进行索引优化,选择,sql查询的重写,表的读取顺序,之后交给查询引擎,通过API调用存储引擎
  5. 存储引擎进行数据的查询
    a.如果需要的话获取相应的锁。
    b.先查询缓存页中有没有相应的数据,如果有则可以直接返回,如果没有就要从磁盘上去读取。
    c.当在磁盘中找到相应的数据之后,则会加载到缓存中来,从而使得后面的查询更加高效,由于内存有限,多采用变通的LRU表来管理缓存页,保证缓存的都是经常访问的数据

在这里插入图片描述
参考:
https://blog.csdn.net/n950814abc/article/details/91347567
Java题库在线答题:www.51ctofx.com

这篇关于MySQL逻辑架构和执行流程(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144871

相关文章

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

MySQL 筛选条件放 ON后 vs 放 WHERE 后的区别解析

《MySQL筛选条件放ON后vs放WHERE后的区别解析》文章解释了在MySQL中,将筛选条件放在ON和WHERE中的区别,文章通过几个场景说明了ON和WHERE的区别,并总结了ON用于关... 今天我们来讲讲数据库筛选条件放 ON 后和放 WHERE 后的区别。ON 决定如何 "连接" 表,WHERE

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

MySQL日志UndoLog的作用

《MySQL日志UndoLog的作用》UndoLog是InnoDB用于事务回滚和MVCC的重要机制,本文主要介绍了MySQL日志UndoLog的作用,文中介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、Undo Log 的作用二、Undo Log 的分类三、Undo Log 的存储四、Undo

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

MySQL底层文件的查看和修改方法

《MySQL底层文件的查看和修改方法》MySQL底层文件分为文本类(可安全查看/修改)和二进制类(禁止手动操作),以下按「查看方法、修改方法、风险管控三部分详细说明,所有操作均以Linux环境为例,需... 目录引言一、mysql 底层文件的查看方法1. 先定位核心文件路径(基础前提)2. 文本类文件(可直

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.