Mysql之基本架构

1.Mysql简介

mysql是一种关系型数据库,由表结构来存储数据与数据之间的关系,同时为sql(结构化查询语句)来进行数据操作。

sql语句进行操作又分为几个重要的操作类型

DQL: Data Query Language 数据查询语句

DML: Data Manipulation Language 添加、删除、修改语句

DDL: Data definition Language 数据库结构操作

DCL:权限控制语句

TCL: 事务相关 比如commit/savepoint、rollback

对应关系数据库,就会有一个非关系型数据库,像redis这种key、value结构数据这种文档存储等等。redis可见博客Redis的数据类型及使用场景-CSDN博客

那么关系型数据库相比非关系型数据有什么区别呢?

a. 关系型数据都是用表来进行维护的,所以格式一致,可以统一用sql语言来进行操作

b.关系型数据都是表结构,所以灵活度不够,操作复杂的海量数据性能比较差,所以我们才会有表结构、索引以及索引优化

c.虽然性能可能会比较慢,但是能做复杂的关联查询操作,比如一对一、一对多、多对一等

思考:Mysql属于关系型数据库的一种,为什么都喜欢用Mysql呢?说句很实在的话,因为开源(不要钱)。那么我们来看看官网是什么吹的What Is MySQL? | Oracle

相比于其它的关系型数据库,Mysql主要由以下几个优势:(跟其它主流的基本上都差不多)

大话来说就是,好用,易上手,稳定可靠,性能好,可扩展高可用,又安全又灵活

易用性: 开发者可以在几分钟内安装好 MySQL ,数据库易于管理。
可靠性: MySQL 是最成熟、使用最广泛的数据库之一。超过 25 年,它已经在各种场景中进行了测试,其中包括许多世界上最大的公司。由于MySQL 的可靠性,组织依赖 MySQL 来运行关键业务应用程序。
可扩展性: MySQL 可扩展以满足最常访问的应用程序的需求。 MySQL 的本机复制架构使 Facebook 等组织能够扩展应用程序以支持数十亿用户。
性能: MySQL HeatWave 比其他数据库服务更快且成本更低,多项标准行业基准测试证明了这一点,包括 TPC-H TPC-DS CH-benCHmark
高可用性: MySQL 为高可用性和灾难恢复提供了一套完整的本机、完全集成的复制技术。对于关键业务应用程序,并满足服务级别协议承诺,客户可以实现 零数据丢失以及秒级的故障转移恢复。
安全性: 数据安全需要保护和遵守行业和政府法规,包括欧盟通用数据保护条例、支付卡行业数据安全标准、健康保险可移植性和责任法案以及国防信息系统局的安全技术实施指南。MySQL 企业版提供高级安全功能,包括身份验证/ 授权、透明数据加密、审计、数据屏蔽和数据库防火墙。
灵活性: MySQL 文档存储为用户开发传统 SQL NoSQL 无模式数据库应用程序提供了最大的灵活性。开发人员可以在同一个数据库和应用程序中混合和匹配关系数据和 JSON 文档。

2.Mysql架构

我们知道,我们写的一条sql语句是从客户端发起,到服务端处理,再由服务端返回数据,那么它经历了哪些模块或流程呢?

在Mysql架构中,主要分为2大模块,一个是服务层,一个是存储引擎层。服务层就是Mysql这个数据库服务提供的一些功能,比如跟客户端连接,分析sql语句等等;而存储引擎层更多的是Mysql一个插件,来负责数据的存储和查询方式

2.1 服务层

Mysql服务层负责从客户端接收sql语句,然后对sql语句进行解析,看sql语句是否正确,是否有权限操作。然后分析出来怎么去查看更好,知道怎么查询了后就去调用存储引擎相关的接口实现,返回数据。服务层主要分为以下几个模块:

2.1.1连接器

首先,我们得连接客户端,那么Mysql里面就有一个连接层,我们来看下连接层相关的变量:

show status like 'Max_used_connections%'

max_used_connections:自服务启动以来最大的连接数

max_used_connections_time 达到这个峰值的时间

-- 最大的连接数,超过该值不允许建立连接,默认151,最小1 最大100000
select @@max_connections;
-- 查询超时时间,毫秒为单位
select @@max_execution_time;
set @@GLOBAL.max_connections=5; -- 设置最大线程数
set @@GLOBAL.max_execution_time=1000; -- 更改会话的查询超时时间为1S 更改后 对新起的会话生效
select * from t_work_order; -- 查询超过1s的数据会报错

连接器的参数有助于我们排查生产问题,比如我们的CPU超高,系统卡了,那么我们就可以查看一下当前用户正在运行的线程:

show full processlist;

字段解析:

user: 操作的用户名

host: 地址

db: 操作的db

command: 当前连接执行的命令 休眠 查询  sleep为空闲连接

time: 这个状态持续的时间;单位是s

state: 状态

info: 线程正在执行的语句,如果线程没有执行语句,则为NULL

如果遇到查询很慢,甚至由于IO阻塞导致了CPU消耗过高怎么解决?

-- 1.查看当前线程
show processlist;
-- 2. 关闭查询query
KILL query 2280; -- 终止上面查询时间过长的id
-- 3. 杀死连接 connection
KILL 2280;


2.1.2 解析器

当成功建立连接后,就开始解析sql语句,会把一条sql语句解析成一颗语法树,看是否符合我们的sql语法,主要分为词法解析和语法解析

词法解析:将 sql 语句打碎,转化成一个一个关键单词,然后交给语法解析器去构建语法树,判断语法是否正确
语法解析: 语法解析已经知道每个 sql 语句的单词了,那么在语法解析的时候,会去检 查语法是否正确,比如, where 是不是写出 where1,from 写成from1.表名、列名是否存在、用户是否有操作权限等等
下面为一个示例:

2.1.3 预处理

什么是预处理,预处理是对解析后的sql进行一定的前置处理,进行提效的。预处理主要有以下两个好处。

1.每次执行语句时解析语句的开销更少。通常,数据库应用程序处理大量几乎相同的语句,仅更改WHERE 查询和删除、 SET 更新和 VALUES 插入等子句中的文字或变量值。
2.防止 SQL 注入攻击。参数值可以包含未转义的 SQL 引号和定界符。

2.1.4 优化器

根据上面的处理,我们已经知道了要执行一个什么样的语句,但是具体怎么执行也会有很多的方式,比如走哪个索引,语句是不是可以优化,做哪种优化,那种执行方式、路径更快呢?

Mysql提供了一些优化器可供选择,通过全局变量optimizer_switch来决定

select @@GLOBAL.optimizer_switch

优化器说明官网:MySQL :: MySQL 8.0 Reference Manual :: 10.9.3 Optimizer Hints

优化方式、优化器实践官网: MySQL :: MySQL 8.0 Reference Manual :: 10 Optimization

优化器会生成一个最终的执行计划,所以这个语句到底怎么走,优化器来决定。

2.1.5    执行器

根据相应的执行计划,去调用数据存储的地方,也就是来到了我们的存储层。执行器会去根据表设置的存储引擎,调用不同存储引擎的API接口获取数据。

至于这个数据怎么存的,这个数据有哪些优化(比如内存去缓存等),就是每个存储引擎自己去做的事情了。并且存储引擎和mysql是解耦的。

执行器的主要职责就是去查询数据,并且把查询结果组装返回,是Mysql与存储引擎的交互方。比如没有索引,就会去扫描全表的数据,一条一条判断是否满足条件。如果有索引,就会走索引树,减少扫描数量。

2.2 存储引擎层

存储层是数据真正存储的地方。Mysql支持不同的存储引擎,这些存储引擎决定了我们数据的存储方式,以及数据的可靠性、一致性、持久性、原子性。也就是我们经常讲的ACID。

有些存储引擎支持ACID,有些存储引擎不支持ACID,有些存储引擎为了性能,有些存储引擎是为了数据的一致性。

那么官网提供了哪些存储引擎: MySQL :: MySQL 8.0 Reference Manual :: 18 Alternative Storage Engines

如何查询当前服务器支持哪些存储引擎呢?

那么存储引擎之间有什么区别呢? 我们根据查出来的信息谈谈InnoDB与MyIASM的区别:

Innodb: 支持事务 ;行级锁 ;支持外键

Myiasm: 不支持事务;仅支持表级锁;不支持外键

有关索引的差异我们后面会提到

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows下安装部署rocketmq

1.1.下载安装rocketmq 下载 | RocketMQ 下载完后解压到自定义目录,MQ解压路径\rocketmq-all-4.6.0-bin-release;(Windows10系统解压路径不要出现空格) 1.2.配置环境变量 配置环境变量,变量名:ROCKETM…

Git 仓库中 -- 代码冲突产生、定位、解决的流程

目录 前置知识1 工具环境2 冲突的产生2.1 仓库中的源代码2.2 人员 A 首先更改代码2.3 人员 B 更改代码,产生冲突2.3.1 第一次错误提示:2.3.2 第二次错误提示: 3 查看冲突4 手动解决冲突4.1 方式一4.2 方式二(tortoisegit&#xff…

mysql设置密码,修改密码,破解密码

目录 mysql官方文档 1. mysql中文文档地址: 2. mysql英文文档地址: 一、数据库设置密码: 1.命令行模式: 2.进入数据库设置密码: 二、数据库修改密码(需要知道旧密码): 1.命令…

vue 展示svg矢量图可缩放拖动

使用插件&#xff1a;svg-pan-zoom <template> <!-- svg图--><div id"svgContainer"></div> </template><script> import svgPanZoom from svg-pan-zoom import svgFile from ../datav/img/220kVscb.svg // 路径根据实际情况调…

同旺科技 FLUKE ADPT 隔离版发布 ---- 说明书

所需设备&#xff1a; 1、FLUKE ADPT 隔离版 内附链接&#xff1b; 应用于&#xff1a;福禄克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 应用于&#xff1a;福禄克Fluke 15B / 17B / 18B

Spring 事件监听

参考&#xff1a;Spring事件监听流程分析【源码浅析】_private void processbean(final string beanname, fi-CSDN博客 一、简介 Spring早期通过实现ApplicationListener接口定义监听事件&#xff0c;Spring 4.2开始通过EventListener注解实现监听事件 FunctionalInterface p…

栈和队列的经典例题,LeetCode 括号匹配问题;栈实现队列;队列实现栈;队列带环问题

1.前序 又有很久没有更新文章了&#xff0c;这次带你们手撕几道基础题&#xff1b;真的就和康纳吃饭一样简单&#xff01;&#xff01;&#xff01; 如果还不会队列和栈的可以去看看之前写的博客&#xff1b; 栈的实现 队列概念以及实现 <- 快速传送 目录 1.前序 …

HTTP响应的基本概念

目录 HTTP响应中的一些信息 HTTPS HTTP响应中的一些信息 状态码&#xff1a;描述了这次HTTP请求是否成功&#xff0c;以及失败的原因。 1&#xff09;200 ---OK 表示这次访问成功了。 2&#xff09;404 ---Not Found 表示客户端请求的资源在服务器这边不存在。 3&a…

线性表(从数据结构的三要素出发)

文章目录 逻辑结构存储结构顺序存储链式存储单链表双链表循环单链表循环双链表静态链表 数据的操作顺序结构链式结构单链表双链表 逻辑结构 线性表是具有相同数据类型的 n ( n ≥ 0 ) n(n≥0) n(n≥0)个数据元素的有限序列&#xff0c;其中 n n n为表长&#xff0c;当 n 0 n0…

KMP算法【C++】

KMP算法测试 KMP 算法详解 根据解释写出对应的C代码进行测试&#xff0c;也可以再整理成一个函数 #include <iostream> #include <vector>class KMP { private:std::string m_pat;//被匹配的字符串std::vector<std::vector<int>> m_dp;//状态二维数组…

WXSS模板样式-全局样式和局部样式

一、WXSS 1.WXSS WXSS(WeiXin Style Sheets)是一套样式语言&#xff0c;用于美化WXML的组件样式&#xff0c;类似于网页开发中的CSS 2.WXSS和CSS的关系 WXSS具有CSS大部分特性&#xff0c;同时&#xff0c;WXSS还对CSS进行了扩充以及修改&#xff0c;以适应微信小程序的开发…

NetSuite Intercompany COGS科目设置问题

在22年底的NetSuite多公司功能串讲中&#xff0c;有一个题目是Intercompany COGS科目的设置问题。近期在项目上这个问题被密集讨论。为了方便分享&#xff0c;所以在此摘出来独立成文。有兴趣的同学也可以翻看之前的视频。 NetSuite知识会 第8谈 多公司功能串讲 NetSuite Inter…

Spring6基础笔记

Spring6 Log4j2 1、概述 1.1、Spring是什么&#xff1f; Spring 是一款主流的 Java EE 轻量级开源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并创立&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发…

MPLS LDP原理与配置

1.LDP基本概念 &#xff08;1&#xff09;LDP协议概述 &#xff08;2&#xff09;LDP会话、LDP邻接体、LDP对等体 &#xff08;3&#xff09;LSR ID 与LDP ID &#xff08;4&#xff09;LDP消息 ⦁ 按照消息的功能&#xff0c;LDP消息一共可以分为四大类型&#xff1a;发现…

【C++STL详解(四)------vector的模拟实现】

文章目录 vector各函数接口总览vector当中的成员变量介绍默认成员函数构造函数1构造函数2构造函数3拷贝构造函数赋值运算符重载函数析构函数 迭代器相关函数begin和end 容量和大小相关函数size和capacityreserveresizeempty 修改容器内容相关函数push_backpop_backinserterases…

OpenStack平台Keystone组件的使用

1. 规划节点 安装基础服务的服务器规划 IP地址 主机名 节点 192.168.100.10 controller Openstack控制节点 2. 基础准备 使用机电云共享的单节点的openstack系统&#xff0c;自行修改虚拟网络编辑器、网络适配器&#xff0c;系统用户名&#xff1a;root&#xff0c;密…

【数据分析面试】53.推送消息的分布情况(SQL)

题目 我们有两个表&#xff0c;一个是 notification_deliveries 表&#xff0c;另一个是包含 created 和购买 conversion dates 的 users 表。如果用户没有购买&#xff0c;那么 conversion_date 列为 NULL。 编写一个查询&#xff0c;以获取用户转换前的推送通知总数的分布情…

51 单片机[4]:数码管显示

目标&#xff1a; 一次显示一个数字&#xff1a;在数码管第三位显示6.同时显示多个不同数字&#xff1a;在数码管前三位分别显示1, 2, 3. 一、认识数码管 LED数码管&#xff1a;数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成“8”字型的器件…

零拷贝(Zero-Copy)

1.背景 现在有这样一个场景&#xff0c;我们需要在本地选择一个文件后&#xff0c;然后上传到网络上。 我们再看看文件的内容数据的具体搬运过程&#xff1a; 你会发现&#xff0c;在整个文件搬运的过程中&#xff0c;发生了多次的数据拷贝和上下文转换。 4次数据拷贝&#…

amis 联动效果触发的几种方式

联动效果实现主要俩种方式: 1.表达式实现联动,基于组件内或数据链的变量变化的联动 比如&#xff1a; "source": "/amis/api/mock2/options/level2?name${name} " (必须是这种字符串拼接形式,在data数据映射中表达式不会触发联动) 所有初始化接口链…