MySQL学习记录 —— 이십사 MySQL连接层和服务层

news2024/11/14 12:09:11

文章目录

  • 1、整体架构
  • 2、连接层
    • 1、网络端口和连接管理线程
    • 2、客户端连接线程管理
    • 3、连接量管理
  • 3、服务层
    • 1、服务管理和公共组件
    • 2、NoSQL接口与SQL接口以及Parser语法分析器
    • 3、优化器和缓存
  • 4、SQL语句执行流程


1、整体架构

MySQL8.0服务器是由连接池、服务管理工具和公共组件、NoSQL接口、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。

在这里插入图片描述

客户端发来请求时,连接层会检查用户账户密码是否正确,连接数是否达到上限;接着来到服务层,接收并解析客户端发来的SQL语句,并且服务层的优化器会按照数据库的最高效的方式来处理SQL语句,8.0之后缓存的作用已经不大了,所以就不关注这方面,以及还有服务管理和公共组件,就像一个大饭店,还有休息区,娱乐区这样的。

当把这些SQL语句转化成高效的SQL语句后,就交给存储引擎层去处理。

MySQL Connectors:为使⽤MySQL服务的编程语言平台,提供了访问接口,可以根据自己实际使用的编程语言到官网下载。

MySQL Shell:是⼀个高级客户端和代码编辑器,以组件的形式提供,需要单独安装。除了提供的类似于 mysql 客户端的功能,还可以使用 JavaScript 和 Python 调用MySQL 的API,一般为MySQL数据库的开发人员使用。

连接层:对客户端连接进行权限校验并保存客户端的连接信息,通过池化技术实现线程重用,以及根据具体的配置限制连接数量。

服务管理和公共组件:提供了数据备份与恢复,安全组件,主从复制和集群管理,表分区等实用功能。

2、连接层

1、网络端口和连接管理线程

MySQL是一个网络服务,通过IP+端口号就可以找到网络上指定的一个MySQL服务。

OS中,一个进程申请一个端口提供对外服务,客户端访问端口,OS将请求转发给这个进程。一个进程也可以申请多个端口。

一台服务器能够侦听多个网络端口上的客户端连接,开放多个端口,只需在选项文件名中指定多个端口即可。

[mysqld]
port=3306
port=3305

连接层通过连接管理器线程处理端口上的客户端连接请求。

在所有平台上,用一个管理器线程处理所有的TCP/IP连接请求;在Unix上,管理器线程还可以处理其它Unix socket连接请求;在 Windows 上,使用一个管理器线程处理通过Shared-memory方式连接请求,使用另⼀个管理器线程处理Named-pipe方式连接请求;在所有平台上,可以额外启用一个端口用于接受针对管理的TCP/IP 连接请求,管理端口的连接可以使用处理"普通" TCP/IP 请求的管理器线程,也可以通过选项文件配置单独的线程。不同的连接请求用的连接协议也不同。

2、客户端连接线程管理

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

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

系统变量 thread_cache_size 决定了线程池缓存的大小。默认情况下,服务器在启动时会自动调整这个值,但也可以通过选项文件明确指定大小,值为 0 时禁用缓存,此时为每个新连接创建执行一个线程,并在连接断开时释放。

有些复杂的SQL语句在执行过程中可能会有深层递归从而消耗更多的内存,通过设置thread_stack=N 调整线程堆栈大小。

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

3、连接量管理

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

mysqld实际上允许 max_connections+1 个客户端连接。额外的连接为拥有CONNECTION_ADMIN 权限的帐账户(管理员)使用,即使普通连接达到了 max_connections 的数量,管理员也可以连接到服务器进行管理操作,主要是为了让所有的连接都能够高效地运作,让停下来无法运行的线程及时地被处理掉。

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

max_connections 具体数据和服务器的硬件有关,比如可用的内存、每个连接消耗的内存,每个连接的工作负载、响应时间、可用文件描述符的数量等等。

3、服务层

1、服务管理和公共组件

Backup & Recovery:备份与恢复,有全量备份和增量备份。全量是指把数据库所有内容都备份一遍,增量是指每隔一段时间把这段时间内的备份。全量和增量组合着备份。
Security:安全
Replication:主从复制
Cluster:MySQL集群
Partitioning:表分区
Instance Manager:实例管理
Administrator:MySQL管理员
Migration Toolkit:迁移工具包

2、NoSQL接口与SQL接口以及Parser语法分析器

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

客户端发来的都是文本形式,两个接口会把它们发给Parset语法分析器进行解析。Parset将客户端发来的SQL语句中的关键字和自定义字段进行提取、解析,最终将 SQL 语句转换为一棵解析树,分析的过程中包含词法分析和语法分析。

词法分析,主要是对关键字进行提取,比如 select/update/delete/create… ;语法分析,主要判断 SQL 语句是否满足语法规则,如果语法错误则异出异常,也就是我们常见的ERROR 1064 (42000): You have an error in your SQL syntax。

对于一个命令会形成这样的语法树

在这里插入图片描述

3、优化器和缓存

经过Parser后,来到优化器。查询优化器会将解析树转化为查询计划,一般情况下,一条查询可以有很多种执行方案,查询优化器会根据执行计划匹配合适的索引,选择最佳的执行方案,最终把确定要执行的SQL交给执行器调用存储引擎API。

select sn, name from student where name = 'xx' and id = 1;
# 优化后
select sn, name from student where id = 1 and name = 'xx';

不过写得太低效优化器也没办法优化得很好。所以用户写的时候也要尽量高效。

MySQL的缓存主要的作用是为了提升查询的效率,当服务器接收到一个 select 查询语句时,会先进入缓存查询当前SQL语句在缓存中是否存在,缓存以 key 和 value 的形式存储,key是具体的SQL语句,value是结果的集合,如果命中缓存,直接返回结果,无法命中缓存,则进入分析器进行正常查询流程。但缓存数据对应的数据在被更新之后将会失效,尤其在写多读少的场景中,缓存会频繁失效与新增,命中率非常低,所以MySQL 8.0开始就没有这个功能了。

4、SQL语句执行流程

在这里插入图片描述

结束。

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

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

相关文章

BIOMOD2 物种分布模拟教程

原文链接:BIOMOD2 物种分布模拟教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247609373&idx5&sn492e7597314a5f9e358c35e4780b275f&chksmfa826dfacdf5e4ecf8ac06bdeba5469b31650bdbefbc8fb88b79c0f332714c453a4cc058d29f&token155…

Linux系统部署MySQL数据库

1.Linux插入光盘,使用df-h获取光盘信息,默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库,编辑vim yum.repos [BaseOS] nameba…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件,以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host:指定数据库服务器的主…

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查,我下面的服务器有漏洞,不得已重装了,正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版,就是管理python环境的得力助手。 # 创建一个名…

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流,还是社交娱乐,微信都扮演着重要的角色。而在微信的使用过程中,添加好友是一项基本而重要的操作,但是您真的会添加微信好友吗? 试试这个神器——微信管理系统,下面分享它快速加客…

TDC 5.0:多集群统一纳管,构建一体化大数据云平台

近期,星环科技数据云平台Transwarp Data Cloud(简称TDC)5.0版本正式发布,TDC5.0架构屏蔽底层多个TDH集群的差异,采用统一操作模式,新增一个多集群抽象与管理层,能够实现多集群网络互通、跨集群资…

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束(primary key)唯一约束(unique key)非空约束检查约束(check)外键约束(foreign key&#xff…

顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH) 1、配置分机 点击分机 -> 找到你需要设置的分机 ->呼叫路由设置为external,这里需要设置的分机是呼叫的并不是坐席的分机呼叫路由 2、配置拨号方案 点击拨号方案 -> 输入目的地绑定 …

C#实战 | 求解《丘建算经》百鸡问题

谈起古代数学,总会想起古希腊欧几里得的名著《几何原本》。而实际上,中国的《周髀算经》《九章算术》《缉古算经》等同样经典,尤其是《九章算术》,更以其算法实用性闻名世界。 中国古代数学的一些发展成果可谓惊艳,足…

不入耳耳机哪个牌子好用?五款卓越精品,小白必看!

怎么选到一款自己满意的开放式耳机?对于刚接触开放式耳机的朋友们来说,耳机的音质、续航、佩戴舒适度都是需要考虑到的,但是普通人往往很难去全面的了解分析耳机的这些性能配置。不入耳耳机哪个牌子好用?为了帮助大家解决这个难题…

Redis三种常用的缓存读写策略

Cache Aside Pattern(旁路缓存模式) 现在基本都用这个模式 Cache Aside Pattern 中服务端需要同时维系 db 和 cache,并且是以 db 的结果为准。 读写步骤: 写: 先更新 db,然后直接删除 cache 。 读 : …

PGCCC|【PostgreSQL】PG考证对工作上有什么好处# PG证书

认证 PostgreSQL 考证(PostgreSQL Certification)在工作上有以下几个好处: 增强专业能力:通过考证,可以系统地学习和掌握 PostgreSQL 数据库的知识和技能,提高自己的专业水平。 提升职业竞争力&#xff1…

Vue.js 生命周期详解:从创建到销毁的全过程

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

leetcode_189. 轮转数组

leetcode_189. 轮转数组 题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…

炎炎夏日 凉凉机房

夏季高温即将到来,温度过高,电梯故障频发。机房温控方式除了加装空调之外,您还知道其他的方式吗? 小伍告诉您一个小妙招:为电梯加装节能设备,小小机器大大能量。 通常电梯在轻载上行,重载下行和…

全国数据智能与智慧政务行业产教融合共同体学术年会暨广东行政职业学院(广东青年职业学院)第一届“求是论坛”成功举办

为进一步深化现代职业教育体系建设理论研究,丰富行业产教融合共同体实践探索,7月13日,全国数据智能与智慧政务行业产教融合共同体学术年会暨广东行政职业学院(广东青年职业学院)第一届“求是论坛”在广东行政职业学院&…

Apache Paimon 在蚂蚁的应用

摘要 :本文整理自 Apache Paimon Committer 闵文俊老师在5月16日 Streaming Lakehouse Meetup Online 上的分享。内容主要分为以下四个部分: 什么是 Paimon蚂蚁 Paimon 应用场景蚂蚁 Paimon 功能改进未来规划 一、什么是 Paimon 1. 实时更新 Paimon 是…

U盘文件夹失踪?两大数据恢复策略全解析

在数字化信息爆炸的今天,U盘作为我们日常工作中不可或缺的存储工具,承载着大量重要数据和文件。然而,当您突然发现U盘中的一个重要文件夹神秘消失时,那份焦急与无助感油然而生。本文旨在深入探讨U盘文件夹失踪的原因,并…

Linux安装mysql(超详细版)

步骤1:新建一个文件夹,专放从网络下载的文件 [rootiZ2zeh6vyxsq620zifz8jaZ home]#mkdir soft #在根目录下创建也可以 步骤2:切换目录,进入soft文件中 [rootiZ2zeh6vyxsq620zifz8jaZ /]# cd home/ #若第一步文件建在根目…

15- 微分方程

对三角函数不敏感