当前位置: 首页 > news >正文

mysql进阶(三)

MySQL架构和存储引擎

1. MySQL架构

        MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰:

2. 连接层

        连接层的作⽤是处理客⼾端的连接,主要学习MySQLServer如何管理连接,包括对可⽤ 连接接⼝的描述和服务器如何使⽤连接处理线程。

2.1 ⽹络端⼝和连接管理线程

        mysql是一个网络服务,通过ip和端口号就可以找到网络上指定的一个mysql服务,程序在启动的时候就可以向操作系统申请一个端口。操作系统只负责转发。通常,一个进程申请一个端口对外提供服务。

2.2 客⼾端连接线程管理

        连接管理器线程在接收到每个客⼾端连接后,把请求转发到真正的执⾏线程,每个请求都对应⼀ 个执⾏线程,该线程处理连接的⾝份验证和具体请求。执⾏线程使⽤线程池技术进⾏缓存,当⼀个请 求需要处理时,先从线程池中查找是否有可⽤的线程,如果没有则新创建⼀个,当连接结束时,如果线程池没有满,则把当前线程放⼊线程池,主要的作⽤是提⾼线程的复⽤,减少创建线程造成的系统 开销从⽽提⾼效率。

        可以通过以下⼏个系统变量和状态变量控制和监视服务器管理客⼾端连接的线程:

        • 系统变量 thread_cache_size 决定了线程池缓存的⼤⼩。默认情况下,服务器在启动时会⾃动 调整这个值,但也可以通过选项⽂件明确指定⼤⼩,值为0时禁⽤缓存,此时为每个新连接创建执 ⾏⼀个线程,并在连接断开时释放;

        • 有些复杂的SQL语句在执⾏过程中可能会有深层递归从⽽消耗更多的内存,通过设置 thread_stack=N 调 整线程堆栈⼤⼩;

         • 要查看缓存中的线程数以及超过缓存数后新创建的线程数,通过状态变量 Threads_cached和Threads_created 查看;

3.3 连接量管理

         • 系统变量 max_connections 可以控制服务器允许同时连接的最⼤客⼾端数,当服务器达到 max_connections 指定的连接数时会拒绝所有新的连接请求,同时会增加状态变量 Connection_errors_max_connections 的值;

         • mysqld实际上允许 max_connections +1 个客⼾端连接。额外的连接为拥有 CONNECTION_ADMIN 权限的帐⼾(管理员)使⽤,即使普通连接达到了 数量,管理员也可以连接到服务器进⾏管理操作; max_connections 的

        • 在部署为主从复制的环境中,从节点的连接数也会计⼊ max_connections 中,如果连接达到上 限主从复制将会失败;

         • m ax_connections 具体数据和服务器的硬件有关,⽐如可⽤的内存、每个连接消耗的内存,每 个连接的⼯作负载、响应时间、可⽤⽂件描述符的数量等等。

3. 服务层

        数据库服务层是整个数据库服务器的核⼼,主要包括了服务管理和公共组件、NoSQL和SQL接⼝、解 析器、查询优化器和缓存等部分

3.1 服务管理和公共组件

MySQL提供了多种功能服务以满⾜不同使⽤场景下的需要,常⽤的服务如下:

         • Backup&Recovery:备份与恢复

         • Security:安全,

         • Replication:主从复制,

        • Cluster:MySQL集群,

         • Partitioning:表分区,

         • InstanceManager:实例管理,

         • Administrator:MySQL管理员,

         • MigrationToolkit:迁移⼯具包。

3.2 NoSQL接⼝与SQL接⼝

        主要负责接收客⼾端发送的各种SQL语句和命令,并将SQL发送到其他部分,然后把接收到的结果返回 给客⼾端。

3.3 Parser(语法分析器)

        语法分析器的主要作⽤是将客⼾端发来的SQL语句中的关键字和⾃定义字段进⾏提取、解析,最 终将SQL语句转换为⼀棵解析树,分析的过程中包含词法分析和语法分析;词法分析,主要是对关键 字进⾏提取,⽐如 select/update/delete/create... ;语法分析,主要判断SQL语句是否满 ⾜语法规则,如果语法错误则异出异常,也就是我们常⻅的ERROR1064(42000):Youhavean error in your SQLsyntax。

3.4 Optimizer(查询优化器)

        通过语法校验的SQL语句将进⼊查询优化器处理阶段,查询优化器会将解析树转化为查询计划, ⼀般情况下,⼀条查询可以有很多种执⾏⽅案,查询优化器会根据执⾏计划匹配合适的索引,选择最 佳的执⾏⽅案,最终把确定要执⾏的SQL交给执⾏器调⽤存储引擎API。

         TIPS: 优化后的SQL语句在条件查询时可能与程序员写的条件过滤顺序不同,但最终的返回结果⼀致。

3.5 Caches&Buffers(缓存)

        MySQL的缓存主要的作⽤是为了提升查询的效率,当服务器接收到⼀个 先进⼊缓存查询当前SQL语句在缓存中是否存在,缓存以 key 和 select 查询语句时,会 value 的形式存储,key是具体的 SQL语句,value是结果的集合,如果命中缓存,直接返回结果,⽆法命中缓存,则进⼊分析器进⾏正 常查询流程。

        这⾥需要说明的是,缓存数据对应的数据在被更新之后将会失效,尤其在写多读少的场景中,缓存会频繁失效与新增,命中率⾮常低,因此MySQL5.6之后服务层缓存功能默认关闭,⽽且在 MySQL8.0中服务层缓存被官⽅删除。

3.6 SQL语句的执⾏流程

5. 存储引擎

        作用:对数据进行处理。

        存储引擎是处理不同表类型SQL操作的MySQL组件。MySQL服务器采⽤可插拔的存储引擎架构, 在服务器运⾏时可以动态的加载和卸载。

        在该层要考虑下面一下几种情况:

 5. 存储引擎

        存储引擎是处理不同表类型SQL操作的MySQL组件。MySQL服务器采⽤可插拔的存储引擎架构, 在服务器运⾏时可以动态的加载和卸载。

5.1 InnoDB存储引擎

         InnoDB是⼀款兼顾⾼可靠性和⾼性能的通⽤存储引擎。在MySQL8.0中默认的存储引擎是 使⽤CREATE TABLE 语句创建表时,在没有修改默认存储引擎或明确指定其他存储引擎时,将创建一个innoDB表。

仅在测试环境下使用:

        和8.0有所不同的是,在MySQL5.X及以前的版本中使⽤⼀个后缀为 .frm 的⼆进制⽂件来记录和描述表定义的信息 。

5.2 MyISAM存储引擎

        mysql5.5之前默认的存储引擎。

       使⽤MyISAM存储引擎的表占⽤空间很⼩,但是由于使⽤表级锁定,所以限制了读/写操作的性能,通 常⽤于中⼩型的Web应⽤和数据仓库配置中的只读或主要是读的场景。

        MyISAM存储引擎的特性:

        相较于之前的innodb存储引擎,外键,事务,hash索引(没有),锁粒度不同,单表的大小限制。

        创建MyISAM表 :

         在MySQL8.0中 InnoDB 是默认引擎,所以在创建表时需要指定 ENGINE=MyISAM;

5.3 MEMORY存储引擎

        使⽤MEMORY存储引擎(以前称为HEAP)创建的表,内容存储在内存中。当服务器由于硬件问题、 断电或其他原因崩溃时数据会丢失,因此这些表仅⽤作临时⼯作区或从其他表中提取数据的只读缓 存。

        • 涉及瞬时、⾮关键数据的操作,例如会话管理或需要缓存的数据,当服务器停⽌或重新启动时, MEMORY 表中的数据会丢失;

         • ⽤于快速访问和低延时,数据量可以完全放在物理内存中,不使⽤虚拟内存;

         • 只读或以读为主的数据访问场景(有限的更新)。

        • 使⽤固定⻓度的存储格式,可变⻓度类型,例如 VARCHAR 使⽤固定⻓度存储;

         • 不能包含 BLOB 或 TEXT 列;

         • ⽀持 AUTO_INCREMENT 的列;

        • ⾮ TEMPORARY MEMORY 表在所有客⼾端之间共享;

        • ⽀持 HASH 索引(默认)和 BTREE 索引;

         • 不⽀持表分区;

         • 由于使⽤单线程,在⾼负载的场景下可能会涉及严重的锁竞争,特别是在多个客⼾端并发执⾏更新 操作的情况下,性能并不⼀定会⽐ InnoDB 更快。

        每次重启服务器内存表中的数据将被清空,内存表中的数据永远不会写⼊磁盘。

5.4 CSV存储引擎

        CSV是逗号分隔值(Comma-SeparatedValues)的缩写,以纯⽂本形式存储表格数据。 

5.5 ARCHIVE存储引擎

        使⽤ ARCHIVE 存储引擎创建的表,存储⼤量不被索引的数据且占⽤空间很⼩,⼀般⽤于归档数据的存储。

        • ⽀持 INSERT , REPLACE 和 SELECT ,但不⽀持 DELETE 和 UPDATE ;

        • ⽀持列的 AUTO_INCREMENT 属性,该列可以有唯⼀约束,且⼿动指定的值不能⼩于该列的最⼤ 值;

        • 不⽀持索引,在任何列上尝试建⽴索引都会报错;

        • 插⼊时,数据将被压缩, ARCHIVE 引擎使⽤ zlib ⽆损数据压缩; INSERT 语句只是将数据写⼊压缩缓冲区并且根据需要刷新到磁盘,当执⾏ SELECT 时会强制刷新缓冲区;

        • 检索时,按需要进⾏解压缩,不⽀持⾏缓存;

        • SELECT操作执⾏全表扫描,找出当前查询的⾏,并读取⾏数;

        • 使⽤⾏级锁定

        • 不⽀持表分区

5.6 BLACKHOLE存储引擎

         BLACKHOLE 存储引擎就像⼀个"⿊洞",接受数据,但不存储数据,检索时总是返回⼀个空结果

5.7 MERGE存储引擎

        MERGE存储引擎,也称为MRG_MyISAM引擎,允许MySQLDBA或开发⼈员在逻辑上将⼀系列相 同的MyISAM表分组,并将它们作为⼀个对象引⽤。适⽤于VLDB(VeryLargeDataBases)环境,如数 据仓库。这⾥的相同表⽰所有表中的列都有相同的数据类型和索引信息。⽰意图如下:

         关于MERGE表的替代⽅案可以使⽤表分区,可以⽀持主键索引,唯⼀索引,全⽂索引等,

5.8 FEDERATED存储引擎 

可以简单的实现分布式;

5.9 不同存储引擎的特性

ps:仅用于自己复习!!!

相关文章:

mysql进阶(三)

MySQL架构和存储引擎 1. MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰: 2. 连接层 …...

MySQL 架构、索引优化、DDL解析、死锁排查

私人博客传送门 MySQL 认识索引 | 魔筝炼药师 MySQL 索引优化 | 魔筝炼药师 OnlineDDL(在 MySQL 5.7 数据库里,InnoDB引擎,执行一条DDL会发生什么事情) | 魔筝炼药师 MySQL 死锁排查 | 魔筝炼药师...

AVM 环视拼接 鱼眼相机

https://zhuanlan.zhihu.com/p/651306620 AVM 环视拼接方法介绍 从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图)_avm拼接-CSDN博客 经典文献阅读之--Extrinsic Self-calibration of the Surround-view System: A Weakly... (环视系统的外参自…...

【Flink银行反欺诈系统设计方案】5.反欺诈系统全生命周期设计

【Flink银行反欺诈系统设计方案】反欺诈系统全生命周期设计 概要:1. 事前反欺诈准备核心模块与架构: 2. 事中反欺诈发现与告警核心模块与架构: 3. 事后反欺诈事件分析核心模块与架构: 4. 反欺诈闭环架构设计整体技术栈&#xff1a…...

aardio - 虚表 —— 两个虚表之间互相拖动交换数据

插入到虚表末尾的方法: import win.ui; import godking.vlistEx; /*DSG{{*/ mainForm win.form(text"vlistEx - table adapter";right849;bottom578;border"thin") mainForm.add( radiobutton{cls"radiobutton";text"移动&qu…...

VScode 中文符号出现黄色方框的解决方法

VScode 中文符号出现黄色方框的解决方法 我的vscode的python多行注释中会将中文字符用黄色方框框处: 只需要打开设置搜索unicode,然后将这一项的勾选取消掉就可以了: 取消之后的效果如下: 另一种情况:中文显示出现黄色…...

LINUX网络基础 [二] - 网络编程套接字,UDP与TCP

目录 前言 一. 端口号的认识 1.1 端口号的作用 二. 初识TCP协议和UDP协议 2.1 TCP协议 TCP的特点 使用场景 2.2 UDP协议 UDP的特点 使用场景 2.3 TCP与UDP的对比 2.4 思考 2.5 总结 三. 网络字节序 3.1 网络字节序的介绍 3.2 网络字节序思考 四. socket接口 …...

Spring统一格式返回

目录 一:统一结果返回 1:统一结果返回写法 2:String类型报错问题 解决方法 二:统一异常返回 统一异常返回写法 三:总结 同志们,今天咱来讲一讲统一格式返回啊,也是好久没有讲过统一格式返…...

Unity多Pass渲染与GPU Instancing深度优化指南

一、技术背景与挑战 1. 多Pass渲染的定位 多Pass渲染策略通过单个Shader中定义多个渲染阶段(如阴影生成、光照计算、后处理等)实现复杂视觉效果,但传统实现会显著增加DrawCall数量。例如标准渲染管线中,一个物体可能经历Base Pa…...

Redis高频面试题10个

1. Redis 的特点及与 Memcached 的区别 特点: 基于内存的键值数据库,支持持久化(RDB/AOF)。 单线程模型,通过 IO 多路复用实现高并发。 支持多种数据结构:字符串、哈希、列表、集合、有序集合等。 提供…...

【数据库】MySQL常见聚合查询详解

在数据库操作中,聚合查询是非常重要的一部分。通过聚合查询,我们可以对数据进行汇总、统计和分析。MySQL提供了丰富的聚合函数来满足不同的需求。本文将详细介绍MySQL中常见的40个聚合函数及其使用场景,并通过8个的案例展示它们的用法。 一、…...

蓝桥备赛(11)- 数据结构、算法与STL

一、数据结构 1.1 什么是数据结构? 在计算机科学中,数据结构是一种 数据组织、管理和存储的格式。它是相互之间存在一种 或多种特定关系的数据元素的集合。 ---> 通俗点,数据结构就是数据的组织形式 , 研究数据是用什么方…...

Linux的系统ip管理

ip地址 命令:ifconfig 127.0.0.1这个ip地址用于指本机。 0.0.0.0特殊ip地址用于指代本机,可以在端口绑定中用来确定绑定关系,在一些ip地址限制中,表示所有ip的意思。如放行规则设置为0.0.0.0,表示允许任意ip访问。 …...

【决策树】分类属性的选择

文章目录 1.信息增益(ID3)2.信息增益率(C4.5)3.基尼指数(CART)ps.三者对比 实现决策树算法最关键的一点就是如何从所有的特征属性中选择一个最优的属性对样本进行分类,这种最优可以理解为希望划…...

uniapp vue3 微信小程序 uni.chooseLocation使用

申请 先要去微信公众平台申请使用接口 开通成功之后就可以在项目中配置使用了 配置 配置manifest.json "mp-weixin": {/* 小程序特有相关 */"requiredPrivateInfos": ["chooseLocation"],"permission": {"scope.userLocati…...

9. Flink的性能优化

1. Flink的资源和代码优化 1.1 slot资源配置 Flink中具体跑任务的进程叫TaskManager,TM进程又会根据配置划分出诺干个TaskSlot,它是具体运行SubTask的地方。slot是Flink用来隔离各个subtask的资源集合,这里的资源一把指内存,TCP…...

十二、OSG学习笔记-Control

上一章节: 十一、OSG学习笔记-操作系统接口-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145891502 本章节代码: OsgStudy/Controls CuiQingCheng/OsgStudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/osg-study/tree/ma…...

集群、分布式与微服务架构 区别

集群、分布式与微服务架构:概念解析与核心差异 在构建现代软件系统时,集群架构、分布式系统和微服务架构是三种常见的技术方案。它们常被混淆,但各自解决的问题、设计理念和应用场景截然不同。本文将从基础概念出发,深入分析三者…...

如何使用SSH命令安全连接并转发端口到远程服务器

ssh -p 22546 rootconnect.westc.gpuhub.com d6IS/mQKq/iG ssh -CNgv -L 6006:127.0.0.1:6006 rootconnect.westc.gpuhub.com -p 22546 第一条命令:用于登录远程服务器,进行交互式操作。第二条命令:用于建立 SSH 隧道,进行端口转…...

【Java 基础】-- 设计模式

目录 Java 设计模式详解 1. 设计模式定义 2. 设计模式示例 2.1 单例模式(Singleton Pattern) 2.2 工厂模式(Factory Pattern) 2.3 观察者模式(Observer Pattern) 2.4 代理模式(Proxy Pat…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

【AI学习】三、AI算法中的向量

在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...