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

MySQL逻辑架构有什么?

1. MySQL逻辑架构分层

MySQL的逻辑架构可分为三层(自上而下):

  1. 连接层(Client Layer)
  2. 服务层(Server Layer)
  3. 存储引擎层(Storage Engine Layer)
+-----------------------+
|     客户端工具         |  (如MySQL Shell、JDBC)
+-----------------------+↓
+-----------------------+
|   连接层               |  (连接管理、认证)
+-----------------------+↓
+-----------------------+
|   服务层               |  (SQL接口、优化器、缓存)
+-----------------------+↓
+-----------------------+
|   存储引擎层           |  (InnoDB、MyISAM等)
+-----------------------+↓
+-----------------------+
|   文件系统             |  (磁盘数据文件、日志)
+-----------------------+

2. 各层核心功能与组件

(1) 连接层(Connection Layer)

职责:管理客户端连接、身份认证、安全校验。
核心组件
连接池:维护线程池处理并发请求(减少频繁创建线程的开销)。
认证模块:验证用户名、密码及主机权限。
协议解析:支持多种客户端协议(如TCP/IP、Unix Socket)。

关键参数

SHOW VARIABLES LIKE 'max_connections';  -- 最大连接数
SHOW STATUS LIKE 'Threads_connected';   -- 当前连接数

(2) 服务层(Server Layer)

职责:解析SQL、优化查询、缓存结果。
核心组件

① SQL接口(SQL Interface)

接收SQL语句:支持DML(SELECT/INSERT)、DDL(CREATE TABLE)等。
返回结果:将查询结果返回给客户端。

② 查询缓存(Query Cache) (MySQL 8.0已移除)

缓存查询结果:以SQL语句为Key,结果集为Value。
失效条件:表数据修改后,相关缓存自动失效。

遗留参数(MySQL 5.7):

SHOW VARIABLES LIKE 'query_cache%';
③ 解析器(Parser)

词法分析:将SQL拆分为令牌(如SELECTFROM)。
语法分析:检查SQL是否符合语法规则,生成解析树。

④ 优化器(Optimizer)

生成执行计划:选择最优索引、连接顺序等。
优化策略
RBO(基于规则):如“外连接转内连接”。
CBO(基于成本):通过统计信息估算I/O、CPU开销。

查看执行计划

EXPLAIN SELECT * FROM users WHERE id = 1;
⑤ 执行器(Executor)

调用存储引擎:根据执行计划操作存储引擎。
返回结果:合并、排序或聚合数据(如GROUP BY)。


(3) 存储引擎层(Storage Engine Layer)

职责:负责数据的存储、索引和事务管理。
核心特点
插件式架构:支持多种引擎(如InnoDB、MyISAM)。
引擎选择:建表时指定(ENGINE=InnoDB)。

常见引擎对比

引擎事务锁粒度外键适用场景
InnoDB支持行锁支持高并发、ACID事务
MyISAM不支持表锁不支持读多写少、全文索引
Memory不支持表锁不支持临时表、高速缓存

查看引擎信息

SHOW ENGINES;
SHOW TABLE STATUS LIKE 'users';

3. 查询执行流程示例

以一条简单查询为例:

SELECT * FROM users WHERE id = 1;

步骤解析

  1. 连接层:客户端通过TCP连接MySQL,认证通过后分配线程。
  2. 服务层
    • 检查查询缓存(若启用且命中则直接返回)。
    • 解析器生成语法树。
    • 优化器选择使用主键索引。
    • 执行器调用InnoDB引擎读取数据。
  3. 存储引擎层
    • InnoDB通过B+树索引定位id=1的行。
    • 返回数据给服务层。
  4. 结果返回:服务层将结果返回客户端。

4. 关键协作机制

(1) 缓冲池(Buffer Pool)

作用:缓存表数据和索引(InnoDB特性)。
优化:减少磁盘I/O,通过innodb_buffer_pool_size配置大小。

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

(2) 日志模块

Redo Log:保证事务持久性(崩溃恢复)。
Undo Log:实现事务回滚和MVCC。
Binlog:主从复制和数据归档。

(3) 事务隔离与锁

隔离级别READ UNCOMMITTEDSERIALIZABLE
锁机制:行锁、间隙锁(InnoDB)。


5. 性能调优要点

  1. 连接层
    • 合理设置max_connections,避免连接风暴。
  2. 服务层
    • 避免复杂子查询,优化索引设计。
    • 使用EXPLAIN分析慢查询。
  3. 存储引擎
    • InnoDB:调整buffer_pool_size,优化事务提交策略(innodb_flush_log_at_trx_commit)。
    • MyISAM:修复碎片(OPTIMIZE TABLE)。

6. 总结

连接层:管理客户端连接和认证。
服务层:解析、优化并执行SQL(核心:优化器)。
存储引擎:插件式管理数据存储(推荐InnoDB)。
协作关键:通过缓冲池、日志和锁机制保证高效与一致性。

理解MySQL逻辑架构有助于定位性能瓶颈(如优化器选错索引)和合理配置参数(如连接池大小)。

相关文章:

MySQL逻辑架构有什么?

1. MySQL逻辑架构分层 MySQL的逻辑架构可分为三层(自上而下): 连接层(Client Layer)服务层(Server Layer)存储引擎层(Storage Engine Layer) -----------------------…...

蓝桥杯 web 常用到的一些知识点

reduce 方法遍历数组、将数组元素累计 ①reduce接收两个参数,一个回调函数,一个初始值 ②回调函数传递了两个参数,一个是累加值,另一个是当前值 reduce的写法: arrays.reduce((a,c&#xff…...

构建高可靠C++服务框架:从日志系统到任务调度器的完整实现

构建高可靠C服务框架:从日志系统到任务调度器的完整实现 一、深度解析示例代码技术体系 1.1 日志系统的进阶应用 示例代码中的ZRY_LOG_XXX宏展示了基础日志功能,但在生产环境中我们需要更完善的日志系统: 推荐技术栈组合: sp…...

<C#>在 C# .NET 中,使用 LoggerExtensions方法创建日志

在 C# .NET 中,LoggerExtensions 是 Microsoft.Extensions.Logging 命名空间下的一组扩展方法,它们为 ILogger 接口提供了便捷的日志记录方式。借助这些扩展方法,你能轻松记录不同级别的日志,如调试信息、信息、警告、错误等。下面…...

微服务与Spring Cloud Alibaba简介

微服务(或微服务架构)是一种云原生架构方法,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。本单元主要介绍微服务架构的定义、微服务的特征、微服务架构面临的挑战、Spring Cloud 定义、Spring Cloud 核心组件、Spring C…...

元生代品牌建设:平台实现工作流(comfyui)创建与技术文档说明

本文摘要:蓝耘科技自2004年成立以来,从传统IT系统集成业务转型为聚焦GPU算力云服务的科技公司。其发布的元生代平台,是一个集算力调度、应用市场和AI协作开发为一体的智算云平台。用户可在蓝耘平台使用ComfyUI进行AI绘图,通过添加…...

无线通信网

1.2.4G相邻信道间有干扰,5G相邻信道几乎无干扰 2.2.4G频段的优点是信号强,衰减小,穿墙强,覆盖距离远;缺点是带宽较窄,速度较慢,干扰较大。 5G频段的优点是带宽较宽,速度较快&#…...

WMware虚拟机Ubuntu磁盘扩容

VMware中操作: 选择要扩容的虚拟机,点击编辑虚拟机设置 打开后点击磁盘——>点击扩展(注意:如果想要扩容的话需要删除快照) 调整到你想要的容量 点击上图的扩展——>确定 然后我们进到虚拟机里面 首先&#…...

vscode头文件自由跳转

文章目录 1. 安装c/c扩展2. 建.vscode文件夹 当你想要ctl鼠标左击跳转到三方库的定义的时候请往下看。 1. 安装c/c扩展 2. 建.vscode文件夹 在.vscode文件夹下新建c_cpp_properties.json {"configurations": [{"name": "Linux","include…...

BUG:Cannot find implementation for xxx. database. xxx. xxx_Impl does not exist

问题背景 使用Jetpack Compose将数据存储在room本地数据库时,编译报错: java. lang. RuntimeException: Cannot find implementation for com. example. androidproject. practice. roomdmeo. database. AppDatabase. AppDatabase_Impl does not exist …...

基于PySide6与pyCATIA的工程图智能文本替换工具开发指南

一、需求背景与实现价值 在汽车、航空等制造领域,CATIA工程图的文本标注管理常面临批量修改需求。传统手工操作存在效率低、易出错等问题。本文实现的文本替换工具具有以下行业价值: 提升图纸修订效率(单次操作可处理数千个文本对象&#x…...

MCP协议下人工智能康复理疗智械融合编程方向分析

一、引言:AI 康复时代的技术革新 在全球人口老龄化进程加速以及慢性病发病率持续走高的双重背景下,康复医疗领域正面临着前所未有的需求增长压力。据世界卫生组织(WHO)相关数据表明,预计到 2050 年,全球 60 岁及以上老年人口数量将激增至 21 亿,这一庞大群体中,绝大多…...

【嵌入式硬件】LAN9253说明书(中文版)

目录 1.介绍 1.1总体介绍 1.2模式介绍 1.2.1微控制器模式: 1.2.2 扩展模式 1.2.3 数字IO模式 1.2.4 各模式图 2.引脚说明 2.1 引脚总览 2.2 引脚描述 2.2.1 LAN端口A引脚 2.2.2 LAN端口B引脚 2.2.3 LAN端口A和、B电源和公共引脚 2.2.4 SPI/SQI PINS 2.2.5 分布式时…...

Java学习手册:Java基本语法与数据类型

Java语言以其简洁明了的语法和强大的数据类型系统而闻名。掌握Java的基本语法和数据类型是成为一名合格Java开发者的第一步。本文将深入探讨Java的基本语法结构和数据类型,帮助读者打下坚实的基础。 Java的基本语法 Java语言的语法设计简洁而强大,强调…...

操作系统 3.4-段页结合的实际内存管理

段与页结合的初步思路 虚拟内存的引入: 为了结合段和页的优势,操作系统引入了虚拟内存的概念。虚拟内存是一段地址空间,它映射到物理内存上,但对用户程序是透明的。 段到虚拟内存的映射: 用户程序中的段首先映射到虚…...

金融简单介绍及金融诈骗防范

在当今社会,金融学如同一股无形却强大的力量,深刻影响着我们生活的方方面面。无论是个人的日常收支、投资理财,还是国家的宏观经济调控,都与金融学紧密相连。​ 一、金融学的概念​ 金融学,简单来说,是研…...

基于docker搭建redis集群环境

在redis目录下创建redis-cluster目录&#xff0c;创建docker-compose.yml文化和generate.sh文件 【配置generate.sh文件】 for port in $(seq 1 9); \ do \ mkdir -p redis${port}/ touch redis${port}/redis.conf cat << EOF > redis${port}/redis.conf port 6379 …...

CSS 中常见的布局相关属性及其功能分类

一、块级布局&#xff08;Block Layout&#xff09; 1. display 作用&#xff1a;定义元素的显示方式。常用值&#xff1a; block&#xff1a;块级元素&#xff0c;默认独占一行。inline&#xff1a;行内元素&#xff0c;与其他内容在同一行显示。inline-block&#xff1a;兼…...

用css画一条弧线

ui里有一条弧线&#xff0c;现在用css实现 关键代码 border-bottom-left-radius: 100% 7px 两个参数分别代表横向和纵向的深度border-bottom-right-radius: 100% 7px...

CesiumForUnreal 本地矢量文件的加载,支持 shp/geojson 等常用格式

实现效果 Cesium for Unreal 集成 GDAL、LibPng 实现加载本地矢量文件 实现步骤 添加依赖在 cesium-unreal 中 extern -> cesium-native -> CMakeLists.txt 中的 57 行添加依赖库,代码如下: set(PACKAGES_PRIVATEabseil draco ktx modp-base64 meshoptimizer openssl …...

面向基于发布-订阅的物联网网络的匿名 MQTT 分析

中文标题&#xff1a; 面向基于发布-订阅的物联网网络的匿名 MQTT 分析 英文标题&#xff1a; An Analysis of Anonymous MQTT for Publish-Subscribe-Based IoT Networks 作者信息 Yudai Fukushima&#xff1a;东京都立大学电气工程与计算机科学系硕士生&#xff0c;研究方向…...

<C#> 详细介绍.NET 依赖注入

在 .NET 开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是一种设计模式&#xff0c;它可以增强代码的可测试性、可维护性和可扩展性。以下是对 .NET 依赖注入的详细介绍&#xff1a; 1. 什么是依赖注入 在软件开发里&#xff0…...

批量给文件编排序号,支持数字序号及时间日期序号编排文件

当我们需要对文件进行编号的时候&#xff0c;我们可以通过这个工具来帮我们完成&#xff0c;它可以支持从 001 到 100 甚至更多的数字序号编号。也可以支持按照日期、时间等方式对文件进行编号操作。这是一种操作简单&#xff0c;处理起来也非常的高效文件编排序号的方法。 工作…...

乳腺癌识别:双模型融合

​本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊​ import matplotlib.pyplot as plt import tensorflow as tf import warnings as w w.filterwarnings(ignore) # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 …...

ubuntu 22.04配置cuda和cudnn

cuda&#xff1a;12.1 wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run sudo sh cuda_12.1.1_530.30.02_linux.runAbort/Continue选择Continue&#xff0c;不要勾选自带的driver 配置环境变量。~/.bashrc e…...

为什么Java不支持多继承?如何实现多继承?

一、前言 Java不支持多继承&#xff08;一个类继承多个父类&#xff09;主要出于文中设计考虑&#xff1b;核心目的是简化语言复杂性并避免潜在的歧义性问题。 二、直接原因&#xff1a;菱形继承/钻石继承问题&#xff08;Diamond Problem&#xff09; 假设存在如下继承关系&…...

ESP32S3 链接到 WiFi

以下是关于如何让 ESP32S3 连接到 WiFi 的完整流程和代码示例&#xff1a; ESP32S3 链接到 WiFi 1. 设置工作模式 ESP32 可以工作在两种模式下&#xff1a; Station (STA) 模式&#xff1a;作为无线终端连接到无线接入点&#xff08;AP&#xff09;&#xff0c;类似于手机或…...

AndroidTV D贝桌面-v3.2.5-[支持文件传输]

AndroidTV D贝桌面 链接&#xff1a;https://pan.xunlei.com/s/VONXSBtgn8S_BsZxzjH_mHlAA1?pwdzet2# AndroidTV D贝桌面-v3.2.5[支持文件传输] 第一次使用的话&#xff0c;壁纸默认去掉的&#xff0c;不需要按遥控器上键&#xff0c;自己更换壁纸即可...

在spark中,窄依赖算子map和filter会组合为一个stage,这种情况下,map和filter是在一个task内进行的吗?

在 Spark 中&#xff0c;当 map 和 filter 这类窄依赖&#xff08;Narrow Dependency&#xff09;的算子连续应用时&#xff0c;它们会被合并到同一个 Stage 中&#xff0c;并且在同一个 Task 内按顺序执行。这种优化称为 流水线&#xff08;Pipeline&#xff09;执行&#xff…...

展讯android15源码编译之apk单编

首先找到你要单编的apk生成的路径&#xff1a; sys\out_system\target\product\ussi_arm64\system_ext\app\HelloDemo\HelloDemo.apk接着打开下面这个文件&#xff1a; sys\out_system\ussi_arm64_full-userdebug-gms.system.build.log在里面找关键字"Running command&q…...

EtherCAT 转 ModbusTCP 网关

一、功能概述 1.1 设备简介 本产品是 EtherCAT 和 Modbus TCP 网关&#xff0c;使用数据映射方式工作。 本产品在 EtherCAT 侧作为 EtherCAT 从站&#xff0c;接 TwinCAT 、 CodeSYS 、 PLC 等&#xff1b;在 ModbusTCP 侧做为 ModbusTCP 主站&#xff08; C…...

SpringBoot集成阿里云文档格式转换实现pdf转换word,excel

一、前置条件 1.1 创建accessKey 如何申请&#xff1a;https://help.aliyun.com/zh/ram/user-guide/create-an-accesskey-pair 1.2 开通服务 官方地址&#xff1a;https://docmind.console.aliyun.com/doc-overview 未开通服务时需要点击开通按钮&#xff0c;然后才能调用…...

大数据-271 Spark MLib - 基础介绍 机器学习算法 线性回归 场景 定义 损失 优化

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; H…...

ubuntu不生成core文件的处理

1、设置unlimited ulimit -a 查看是否设置&#xff0c;没有设置的使用下面命令设置 ulimit -c unlimited这个设置只在当前会话有效&#xff0c;添加到 ~/.bashrc 中&#xff0c;重开终端生效 2、sysctl配置 修改 /etc/sysctl.conf 文件 &#xff0c;增加以下两个配置&#…...

游戏服务器DDoS攻防实战指南——从攻击溯源到智能防护体系构建

本文深度解析游戏行业DDoS攻防技术演进路线&#xff0c;基于等保2.0与NIST框架&#xff0c;从攻击流量识别、弹性防护架构、智能调度算法三大维度&#xff0c;揭示游戏服务器防护体系的23个关键控制点。通过近期《永劫无间》服务器瘫痪事件复盘&#xff0c;结合Gartner最新混合…...

JAVA 导出 word

1、模板方式导出 1.1、引入 maven 依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.2</version> </dependency>1.2、导出文档代码 public static void main(String[] args…...

OpenHarmony 5.0版本视频硬件编解码适配

一、简介 Codec HDI&#xff08;Hardware Device Interface&#xff09;对上层媒体服务提供视频编解码的驱动能力接口&#xff0c;主要功能有获取组件编解码能力&#xff0c;创建、销毁编解码器对象&#xff0c;启停编解码器操作&#xff0c;编解码处理等。 Codec HDI 2.0接口…...

《Python星球日记》第23天:Pandas基础

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 订阅专栏&#xff1a;《Python星球日记》 目录 一、Pandas 简介1. 什么是 Pandas&…...

ubuntu22.04下安装mysql以及mysql-workbench

一、mysql安装以及配置 安装之前先查看是否已将安装mysql: rpm -qa | grep mysql (一)、在线安装 保证网络正常的情况下: 1、更新软件包: sudo apt update 2、安装mysql安装包 查看可以安装的安装包: sudo apt search mysql-server 安装指定安装包: sudo apt i…...

让 Python 脚本在后台持续运行:架构级解决方案与工业级实践指南

让 Python 脚本在后台持续运行&#xff1a;架构级解决方案与工业级实践指南 一、生产环境需求全景分析 1.1 后台进程的工业级要求矩阵 维度开发环境要求生产环境要求容灾要求可靠性单点运行集群部署跨机房容灾可观测性控制台输出集中式日志分布式追踪资源管理无限制CPU/Memo…...

设计模式 四、行为设计模式(2)

五、状态模式 1、概述 状态设计模式是一种行为型设计模式&#xff0c;它允许对象在其内部状态发生时改变其行为&#xff0c;这种模式可以消除大量的条件语句&#xff0c;并将每个状态的行为封装到单独的类中。 状态模式的主要组成部分如下&#xff1a; 1&#xff09;上…...

C++中作用域(public,private,protected

在C中&#xff0c;public、private 和 protected 是用于控制类成员&#xff08;变量和函数&#xff09;访问权限的关键字。它们决定了类成员在代码中的可见性和可访问性。在学习时候&#xff0c;对于public是最容易理解的&#xff0c;对于private也好理解&#xff0c;但是对于p…...

Spring配置方式演进:从XML到注解,构建灵活高效的开发体系

Spring配置方式演进&#xff1a;从XML到注解&#xff0c;构建灵活高效的开发体系 在Spring框架的演进长河中&#xff0c;配置方式始终是开发者需要掌握的核心技能。从早期XML一统天下的严谨规范&#xff0c;到注解驱动的敏捷开发&#xff0c;再到如今Java Config的优雅实践&am…...

网络4 OSI7层

OSI七层模型&#xff1a;数据如何传送&#xff0c;向下传送变成了什么样子 应用层 和用户打交道&#xff0c;向用户提供服务。 例如&#xff1a;web服务、http协议、FTP协议 1.用户接口 2.提供各种服务 通过浏览器&#xff08;接口&#xff09;提供Web服务 表示层 翻译 我的“…...

前端请求设置credentials: ‘include‘导致的cors问题

1.背景 前端请求设置credentials: ‘include‘其实主要是为了发送凭证&#xff0c;传cookie给后端 2.前端请求 fetch(http://frontend.com, { method: GET, // 或其他HTTP方法 credentials: include, // 不携带凭证 headers: { Content-Type: application/json, }, })…...

LabVIEW中VI Scripting 特定对象解析

该 LabVIEW 程序通过三条并行代码路径&#xff0c;借助 VI Scripting 功能&#xff0c;以特定方式解析程序框图对象&#xff0c;展示了不同方法在处理对象嵌套及特定范围对象时的差异。 ​ 上方文字&#xff1a;三条并行代码路径展示了解析程序框图的不同方式。第一条路径使用 …...

CISCO组建RIP V2路由网络

1.实验准备&#xff1a; 2.具体配置&#xff1a; 2.1根据分配好的IP地址配置静态IP&#xff1a; 2.1.1PC配置&#xff1a; PC0&#xff1a; PC1&#xff1a; PC2&#xff1a; 2.1.2路由器配置&#xff1a; R0&#xff1a; Router>en Router#conf t Enter configuration…...

性能飙升50%,react-virtualized-list如何优化大数据集滚动渲染

在处理大规模数据集渲染时&#xff0c;前端性能常常面临巨大的挑战。本文将探讨 react-virtualized-list 库如何通过虚拟化技术和 Intersection Observer API&#xff0c;实现前端渲染性能飙升 50% 的突破&#xff01;除此之外&#xff0c;我们一同探究下该库还支持哪些新的特性…...

超低功耗MCU软件开发设计中的要点与选型推荐

前沿-超低功耗MCU应用&#xff1a; 超低功耗MCU&#xff08;微控制器&#xff09;凭借其极低的功耗和高效的能量管理能力&#xff0c;正在快速渗透到多个新兴领域&#xff0c;尤其在物联网&#xff08;IoT&#xff09;、可穿戴设备、智能家居和医疗电子等领域展现出巨大的应用…...

Gson、Fastjson 和 Jackson 对比解析

目录 1. Gson (Google) 基本介绍&#xff1a; 核心功能&#xff1a; 特点&#xff1a; 使用场景&#xff1a; 2. Fastjson (Alibaba) 基本介绍&#xff1a; 核心功能&#xff1a; 特点&#xff1a; 使用场景&#xff1a; 3. Jackson 基本介绍&#xff1a; 核心功能…...