二、 MySQL 内部技术架构

news2024/11/24 3:23:32

二、 MySQL 内部技术架构
在这里插入图片描述
在这里插入图片描述
047 Mysql内部支持缓存查询吗?

当MySQL接收到客户端的查询SQL之后,仅仅只需要对其进行相应的权限验证之后,就会通过Query
Cache来查找结果,甚至都不需要经过Optimizer模块进行执行计划的分析优化,更不需要发生任何存储
引擎的交互
mysql5.7支持内部缓存,8.0之后就废弃掉了

048 mysql8为何废弃掉查询缓存?
缓存的意义在于快速查询提升系统性能,可以灵活控制缓存的一致性
mysql缓存的限制

  1. mysql基本没有手段灵活的管理缓存失效和生效,尤其对于频繁更新的表
  2. SQL必须完全一致才会导致cache命中
  3. 为了节省内存空间,太大的result set不会被cache (< query_cache_limit);
  4. MySQL缓存在分库分表环境下是不起作用的;
  5. 执行SQL里有触发器,自定义函数时,MySQL缓存也是不起作用的;
  6. 在表的结构或数据发生改变时,基于该表相关cache立即全部失效。

049 替代方案是什么?
应用层组织缓存,最简单的是使用redis,ehcached等

050 Mysql内部有哪些核心模块组成,作用是什么?
在这里插入图片描述
Connectors(客户端)
MySQL服务器之外的客户端程序,与具体的语言相关,例如Java中的JDBC,图形用户界面SQLyog等。
本质上都是在TCP连接上通过MySQL协议和MySQL服务器进行通信。
MySQL Server(服务器)
第1层:连接层
系统(客户端)访问 MySQL 服务器前,做的 第一件事就是建立 TCP 连接 。
经过三次握手建立连接成功后, MySQL 服务器对 TCP 传输过来的账号密码做 身份认证、权限获
取 。
用户名或密码不对 ,会收到一个 Access denied for user 错误,客户端程序结束执行
用户名密码认证通过 ,会从权限表 查出账号拥有的权限 与连接关联,之后的权限判断逻辑,都
将依赖于此时读到的权限
TCP 连接收到请求后,必须要分配给一个线程专门与这个客户端的交互。所以还会有个线程池,去
走后面的流程。每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。
第2层:服务层
Management Serveices & Utilities: 系统管理和控制工具
SQL Interface:SQL接口:
接收用户的SQL命令,并且返回用户需要查询的结果。 比如SELECT … FROM就是调用SQL Interface
key 非key key 非key
SELECT age FROM user
MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义
函数等多种SQL语言接口
Parser:解析器:
在SQL命令传递到解析器的时候会被解析器验证和解析。解析器中SQL 语句进行 语法分析、语法解
析 ,并为其创建 语法树 。
语法分析
语法分析主要是把输入转化成若干个tokens,包含key和非key。
在分析之后,会得到4个Token,其中有2个key,它们分别是SELECT、FROM。
在这里插入图片描述
Optimizer:查询优化器:
SQL语句在语法解析后、查询前会使用查询优化器对查询进行优化, 确定SQL语句的执行路径,生成
一个执行计划 。
Caches & Buffers: 查询缓存组件:
MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结
果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、查询优化和执行的整个过
程了,直接将结果反馈给客户端。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 。
这个查询缓存可以在不同客户端之间共享 。

第3层:引擎层
插件式存储引擎层( Storage Engines), 负责MySQL中数据的存储和提取,对物理服务器级别维护的底层数
据执行操作,服务器通过API与存储引擎进行通信 。不同的存储引擎具有的功能不同,管理的表有不同的存
储结构,采用的存取算法也不同,这样我们可以根据自己的实际需要进行选取。例如MyISAM引擎和
InnoDB引擎。

存储层
所有的数据、数据库、表的定义、表的每一行的内容、索引,都是存在 文件系统 上,以文件的方式存
在,并完成与存储引擎的交互。

051 一条sql发送给mysql后,内部是如何执行的?(说一下 MySQL
执行一条查询语句的内部执行过程?)

在这里插入图片描述
首先, MySQL客户端通过协议与MySQL服务器建连接,通过SQL接口发送SQL语句,先检查查询缓存,如果命中,
直接返回结果,否则进行语句解析。 也就是说,在解析查询之前,服务器会先访问查询缓存,如果某个查
询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行。它仅仅将缓存中的结果返
回给用户即可,这将大大提高系统的性能。
接下来, MySQL解析器通过关键字将SQL语句进行解析,并生成一棵对应的解析树, 解析器使用MySQL语法规
则验证和解析SQL语句。例如,它将验证是否使用了错误的关键字,或者使用关键字的顺序是否正确,
引号能否前后匹配等; 预处理器则根据MySQL规则进一步检查解析树是否合法, 例如,这里将检查数据表和
数据列是否存在,还会解析名字和别名,看是否有歧义等。 然后预处理器会进行查询重写,生成一棵新解析
树。
接下来, 查询优化器将解析树转化成执行计划。 MySQL优化程序会对我们的语句做一些优化,如子查询转
换为连接、表达式简化等等。优化的结果就是生成一个执行计划,这个执行计划表明了应该使用哪些索
引执行查询,以及表之间的连接顺序是啥样,等等。我们可以使用EXPLAIN语句来查看某个语句的执行
计划。
最后, 进入执行器阶段。 完成查询优化后, 查询执行引擎 会按照生成的执行计划调用存储引擎提供的接口
执行SQL查询并将结果返回给客户端。在MySQL8以下的版本,如果设置了查询缓存,这时会将查询结
果进行缓存,再返回给客户端。
在这里插入图片描述
052 MySQL 提示“不存在此列”是执行到哪个节点报出的?
是在Parser:解析器 分析sql语法的时候检查的列。

053 如果一张表创建了多个索引,在哪个阶段或模块进行的索引选
择?

在优化器阶段Optimizer:查询优化器:

054 MySQL 支持哪些存储引擎?默认使用哪个?
查看MySQL提供什么存储引擎
SHOW ENGINES;
在这里插入图片描述

也可以通过以下语句查看默认的存储引擎:
SHOW VARIABLES LIKE ‘%default_storage_engine%’;
在这里插入图片描述
055 Mysql8.0自带哪些存储引擎?分别是做什么的?

  1. InnoDB存储引擎
    InnoDB是MySQL的默认事务型引擎,它被设计用来 处理大量的短期(short-lived)事务 。可以确保
    事务的完整提交(Commit)和回滚(Rollback)。
    除非有非常特别的原因需要使用其他的存储引擎,否则 应该优先考虑InnoDB引擎 。
    数据文件结构:
    表名.frm 存储表结构(MySQL8.0时,合并在表名.ibd中)
    表名.ibd 存储数据和索引
    InnoDB不仅缓存索引还要缓存真实数据, 对内存要求较 高 ,而且内存大小对性能有决定性的影
    响。

  2. MyISAM存储引擎
    MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但 MyISAM不支持事务和行级
    锁 ,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。
    优势是访问的 速度快 ,对事务完整性没有要求或者以SELECT、INSERT为主的应用。
    数据文件结构:
    表名.frm 存储表结构
    表名.MYD 存储数据
    表名.MYI 存储索引
    SHOW VARIABLES LIKE ‘%default_storage_engine%’;
    MyISAM只缓存索引,不缓存真实数据。

  3. Archive引擎
    Archive档案存储引擎只支持INSERT和SELECT操作 。
    Archive表适合日志和数据采集(档案)类应用。
    根据英文的测试结论来看,Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表小
    大约83%。

  4. Blackhole引擎
    Blackhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存 。
    但服务器会记录Blackhole表的日志,所以可以用于复制数据到备库,或者简单地记录到日志。但
    这种应用方式会碰到很多问题,因此并不推荐。

  5. CSV引擎
    CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但不支持索引 。
    CSV引擎可以作为一种数据交换的机制,非常有用。
    CSV存储的数据直接可以在操作系统里,用文本编辑器,或者excel读取。

  6. Memory引擎
    如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用
    Memory表是非常有用。
    Memory表至少比MyISAM表要快一个数量级。

  7. Federated引擎
    Federated引擎是访问其他MySQL服务器的一个代理(跨库关联查询) ,尽管该引擎看起来提供了一种
    很好的跨服务器的灵活性,但也经常带来问题,因此默认是禁用的。
    056 MySQL 存储引擎架构了解吗?
    在这里插入图片描述
    内存区域
    Buffer Pool:在InnoDB访问表记录和索引时会在Buffer Pool的页中缓存,以后使用可以减少磁盘IO操
    作,提升效率。主要用来缓存热的数据页和索引页。
    Log Buffer:用来缓存redolog
    Adaptive Hash Index:自适应哈希索引
    Change Buffer:它是一种应用在非唯一普通索引页(non-unique secondary index page)不在缓冲池
    中,对页进行了写操作,并不会立刻将磁盘页加载到缓冲池,而仅仅记录缓冲变更(Buffer
    Changes),等未来数据被读取时,再将数据合并(Merge)恢复到缓冲池中的技术。写缓冲的目的是
    降低写操作的磁盘IO,提升数据库性能。

磁盘区域
磁盘中的结构分为两大类:表空间和重做日志。
表空间:分为系统表空间(MySQL 目录的 ibdata1 文件),临时表空间,常规表空间,Undo 表空间
以及 file-per-table 表空间(MySQL5.7默认打开file_per_table 配置)。系统表空间又包括了
InnoDB数据字典,双写缓冲区(Doublewrite Buffer),修改缓存(Change Buffer),Undo日志
等。
Redo日志:存储的就是 Log Buffer 刷到磁盘的数据。

057 能否单独为一张表设置存储引擎?
方法1:
设置默认存储引擎:
SET DEFAULT_STORAGE_ENGINE=MyISAM;

方法2:
或者修改 my.cnf 文件:vim /etc/my.cnf
新增一行:default-storage-engine=MyISAM
重启MySQL:systemctl restart mysqld

方法3:
我们可以为 不同的表设置不同的存储引擎

CREATE TABLE 表名( 建表语句; ) ENGINE = 存储引擎名称;
ALTER TABLE 表名 ENGINE = 存储引擎名称;

058 阿里、京东等大厂都有自研的存储引擎,如何开发一套自己的?
开发存储引擎并不难,难的是开发出来高效的有意义的存储引擎。
简单例子可以看一下官方源码中的示例,可以实现一个什么也没做的存储引擎。
有兴趣可以参考官方文档:https://dev.mysql.com/doc/dev/mysql-server/latest/

059 MyISAM 和 InnoDB 的区别是什么?
外键 事务 锁
在这里插入图片描述
060 具体说一下如何做技术选型
除非几乎没有写操作全部都是高频的读操作可以选择MyISAM作为表的存储引擎,其他业务可以一律使
用InnoDB。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品缺陷管理软件:了解功能与选择要点

在现代社会&#xff0c;产品缺陷管理软件已经成为了各个行业必不可少的工具。它可以帮助企业更好地管理和解决产品中存在的缺陷问题&#xff0c;提高产品质量和客户满意度。然而&#xff0c;市场上存在着众多的产品缺陷管理软件&#xff0c;如何选择一款好用、适合自己的软件成…

Java实现数字加密

Java实现数字加密 需求分析代码实现小结Time 需求分析 1.首先&#xff0c;考虑方法是否需要接收数据处理&#xff1f; 需要一个4位数&#xff0c;至于是哪一个数&#xff0c;让方法的调用者传递。 所以&#xff0c;方法的参数&#xff0c;就是这个需要加密的四位数 2.接着&…

Unity 编辑器资源导入处理函数 OnPostprocessAudio :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPostprocessAudio 用法 点击封面跳转下载页面 简介 在Unity中&#xff0c;我们可以使用编辑器资源导入处理函数&#xff08;OnPostprocessAudio&#xff09;来自定义处理音频资源的导入过程。这个函数是继承自AssetPostprocessor类的&#xff…

电压信号转电流信号

用运算放大器配置电流&#xff0c;使其既能做同相放大电路&#xff0c;也能把电压转化为电流信号 1、当SW1断开情况下&#xff0c;OUT的电压仅受U1.3产生的同相放大电路有关&#xff0c;把0-3V输入转换成0-10V 2、当SW1闭合时 设输入INT的电压信号为Vi&#xff0c;负载电阻R8的…

04-7_Qt 5.9 C++开发指南_QTreeWidget和QDockWidget

文章目录 1. 实例功能简述2. 源码2.1 可视化UI设计2.2 mainwindow.h2.3 mainwindow.cpp 1. 实例功能简述 本节介绍 QTreeWidget、QDockWidget 的使用&#xff0c;以及用 QLabel 显示图片的方法。实例 samp4_8以QTreeWidget 为主要组件&#xff0c;创建一个照片管理器&#xff…

分享:2023新手做闲鱼电商如何轻松过万。详细步骤分享

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 如果一个人想赚很多钱&#xff0c;他必须学会从小钱开始。如果他想赚一点钱&#xff0c;他必…

springboot(2)

springmvc 把软件系统分为3个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器 &#xff08;Controller&#xff09;。 模型&#xff08;Model&#xff09;&#xff1a;Model是由一个实体Bean实现的&#xff0c;是数据的载体…

Modbus TCP转Profibus DP网关modbus tcp报文解析

捷米JM-DPM-TCP网关。在Profibus总线侧作为主站&#xff0c;在以太网侧作为ModbusTcp服务器功能&#xff0c; 下面是介绍捷米JM-DPM-TCP主站网关组态工具的配置方法 2, Profibus主站组态工具安装 执行资料光盘中的安装文件setup64.exe或setup.exe安装组态工具。安装过程中一直…

画原型只需6招,快速成原型图!

画原型图&#xff0c;是产品设计过程中的重头戏。一个优秀的原型图&#xff0c;能把设计理念以视觉的形式呈现出来&#xff0c;让团队感受产品的交互和体验&#xff0c;明确下一步要做什么。那么&#xff0c;怎样才能画出高质量的原型图呢&#xff1f;下面就来介绍几招实用的技…

文件传输软件的市场现状和未来趋势

文件传输软件是一种能够在不同计算机之间高效、便捷、安全地传送各种类型的文件的应用软件。它是计算机领域中的一项重要技术&#xff0c;涉及到网络通信、数据加密、文件管理等多个方面。随着互联网和移动互联网的发展&#xff0c;文件传输软件的市场需求也日益增大&#xff0…

每日汇评:在50日移动均线下方,黄金的下行势头依然强劲

1、黄金价格连续第二天下跌&#xff0c;美元在周五的抛售后恢复稳定&#xff1b; 2、在中国和美国公布关键通胀数据之前&#xff0c;投资者保持谨慎&#xff1b; 3、在日相对强弱指数(RSI)偏弱的情况下&#xff0c;金价在持续跌破1925美元的情况下&#xff0c;可能跌至1910美…

嵌入式开发学习(STC51-3-点亮led)

内容 点亮第一个led&#xff1b; led闪烁&#xff1b; led流水灯&#xff1b; led简介 led即发光二极管&#xff0c;它具有单向导电性&#xff0c;通过5mA左右电流即可发光&#xff0c;电流越大&#xff0c;其亮度越强&#xff0c;但若电流过大&#xff0c;会烧毁二极管&…

Matplotlib引领数据图表绘制

Matplotlib引领数据图表绘制 前言图像得组成画图设置 figure设置标题设置坐标轴设置 label 和 legend添加注释使用子图中文乱码解决保存图形显示图形条形图直方图散点图饼状图 总结 前言 在数据科学领域&#xff0c;数据可视化是一种强大的工具&#xff0c;能够将复杂的数据转…

Redis单机,主从,哨兵,集群四大模式

Redis 单机模式 Redis 单机模式是指 Redis 数据库在单个服务器上以独立的、单一的进程运行的模式。在这种模式下&#xff0c;Redis 不涉及数据分片或集群配置&#xff0c;所有的数据和操作都在一个实例中进行。以下是关于 Redis 单机模式的详细介绍&#xff1a; 单一实例&#…

数据连接,图文档与BOM数据紧密相连

在现代制造业的产品开发和生产过程中&#xff0c;图文档和BOM数据是不可或缺的重要信息。图文档记录了产品的设计和工程数据&#xff0c;而BOM数据明确了产品所需物料的清单和规格。然而&#xff0c;由于图文档和BOM数据分属不同的系统&#xff0c;数据之间的连接和共享往往成为…

赢在起跑线:美国计算机读研规划攻略

以下是一个去美国学计算机的读研规划&#xff0c;供您参考&#xff1a;01 基础准备 学术准备&#xff1a;在本科阶段&#xff0c;您需要确保已经掌握了计算机科学的基本知识和技能&#xff0c;包括计算机体系结构、编程语言、数据结构和算法等。同时&#xff0c;建议您参与一…

[学习笔记]微信小程序全套开发流程(ing)

https://www.bilibili.com/video/BV1mV4y1o7fu 1.整体概述 2.环境搭建 略 4.纯净版项目 5.快速入门 5.1组件(类似HTML标签) wxml中的标签html中的标签textspanviewdivimageimgiconnavigatora view组件 <view><view class"c0">学生&#xff1a;<…

怎样理解黑盒测试和白盒测试?二者有什么关系

按照使用的测试技术可以将软件测试分为黑盒测试与白盒测试。 &#xff08;1&#xff09;黑盒测试 黑盒测试就是把软件(程序)当作一个有输入与输出的黑匣子&#xff0c;它把程序当作一个输入域到输出域的映射&#xff0c;只要输入的数据能输出预期的结果即可&#xff0c;不必关…

吉利科技携手企企通,打造集团化数智供应链系统

近日&#xff0c;吉利科技集团有限公司&#xff08;以下简称“吉利科技”&#xff09;联合企企通成功召开SRM采购供应链管理项目启动会。企企通与吉利科技高层、项目负责人与团队成员出席此次启动会。 双方将携手在企业供应商全生命周期管理、采购全流程、电子招投标、采购分析…

打造本地户外装备小程序商城教程大揭秘

在如今的移动互联网时代&#xff0c;小程序已经成为了各行各业的发展利器。尤其对于户外用具行业来说&#xff0c;一个专属的小程序商城将能够极大地提升企业的品牌形象和销售业绩。下面就来介绍一下快速上手制作户外用具小程序的攻略吧。 首先&#xff0c;登录乔拓云平台进入商…