MySQL之体系结构

news2024/11/13 18:13:40

华子目录

  • MySQL简介
  • MySQL的特性
  • MySQL版本
    • MySQL常见版本
  • 数据库排名网站
  • MySQL结构体系
    • 查看最大连接数
    • 查询缓存配置情况
  • 一条SQL语句执行流程

MySQL简介

  • MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年,SUN又被Oracle以74亿美金收购。
  • 目前MySQL被广泛地应用在Internet上的中小型网站中。由于体积小、速度快、总体拥有成本低,尤其是开放源代码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

MySQL的特性

  • 1.使用C和C++ 编写,并使用了多种编译器进行测试,保证源代码的可移植性。
  • 2.支持 AIX、BSDi、FreeBSD、HP-UX、LinuxMac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
  • 3.为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等
  • 4.支持多线程,充分利用CPU资源,支持多用户。
  • 5.优化的SQL查询算法,有效地提高查询速度。
  • 6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
  • 7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
  • 8.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
  • 9.提供用于管理、检查、优化数据库操作的管理工具。
  • 10.可以处理拥有上千万条记录的大型数据库。

MySQL版本

  • 1.Alpha版:开发版,公司内部使用
  • 2.Beta版:完成开发后,用户体验版
  • 3.RC版:生产环境发布之前的一个小版本或称候选版
  • 4.GA版:正式发布版本

MySQL常见版本

  • MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。
  • MySQL Enterprise Edition 企业版本,需付费,可以试用 30 天。
  • MySQL Cluster 集群版,开源免费。可将几个 MySQL Server 封装成一个 Server。
  • MySQL Cluster CGE 高级集群版,需付费

数据库排名网站

http://db-engines.com/en/ranking

MySQL结构体系

  • Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。
  • Connectors指的是不同语言中与SQL的交互。
  • Management Serveices & Utilities: 系统管理和控制工具。
  • Connection Pool:连接池。管理缓冲用户连接,线程处理等需要缓存的需求。
  • SQL Interface:SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface。
  • Parser: 解析器。SQL命令传递到解析器的时候会被解析器验证和解析。
  • Optimizer:查询优化器。SQL语句在查询之前会使用查询优化器对查询进行优化。
  • Cache和Buffer: 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
  • Engine:存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看最大连接数

mysql> show variables like '%max_connections%';

查询缓存配置情况

mysql> show variables like '%query_cache%';
MySQL 是一个开源的关系型数据库管理系统(RDBMS),它采用了典型的客户端-服务器体系结构。以下是 MySQL 的基本体系结构:

1. 客户端层(Client Layer):
   - 客户端层是与用户交互的部分,用户通过客户端连接到 MySQL 服务器,并发送查询和命令。
   - 客户端可以是各种类型的应用程序,例如命令行工具、图形用户界面(GUI)、Web 应用程序等。
   - 客户端与服务器之间通过网络连接进行通信,通常使用标准的 MySQL 协议进行数据交换。

2. 连接池管理器(Connection Pool Manager):
   - 连接池管理器负责管理客户端与服务器之间的连接。
   - 它处理连接的创建、维护和回收,以确保高效地使用服务器资源并提高性能。

3. 解析器(Parser):
   - 解析器负责解析客户端发送的 SQL 查询和命令,并将其转换为内部数据结构以供后续处理。
   - 解析器还执行语法和语义分析,以确保查询和命令的正确性。

4. 优化器(Optimizer):
   - 优化器负责对解析后的查询进行优化,以提高执行效率。
   - 它使用各种优化技术和算法,例如查询重写、索引选择、连接重排序等,以生成执行效率更高的查询计划。

5. 查询缓存(Query Cache)(部分版本中不再使用):
   - 查询缓存存储已经执行过的查询结果,以提高相同查询的执行速度。
   - 当客户端发送一个查询时,MySQL 首先检查查询缓存,如果找到了相同的查询,则直接返回缓存的结果,而不需要执行实际的查询操作。

6. 存储引擎层(Storage Engine Layer):
   - 存储引擎层负责管理数据的存储和检索,它实现了 MySQL 的各种存储引擎(例如 InnoDB、MyISAM 等)。
   - 不同的存储引擎提供了不同的特性、性能和适用场景,用户可以根据需求选择合适的存储引擎。

7. 锁管理器(Lock Manager):
   - 锁管理器负责管理数据库中的锁,以确保事务的并发控制和数据一致性。
   - 它处理锁的申请、释放和冲突解决,以避免数据的并发访问导致的问题。

8. 日志管理器(Log Manager):
   - 日志管理器负责管理数据库的事务日志,以实现事务的持久性和恢复能力。
   - 它记录所有的数据修改操作,包括事务的提交和回滚,以便在数据库发生故障时进行恢复。

9. 缓冲池(Buffer Pool):
   - 缓冲池是内存中的一个区域,用于缓存数据库的数据和索引页,以提高数据访问的速度。
   - 它充当了内存和磁盘之间的缓冲,减少了频繁的磁盘 I/O 操作,从而提高了数据库的性能。

10. 磁盘管理器(Disk Manager):
    - 磁盘管理器负责管理数据库在磁盘上的存储结构,包括数据文件、日志文件、索引文件等。
    - 它处理数据的读写操作,并管理磁盘空间的分配和释放。

这些组件共同构成了 MySQL 的体系结构,实现了数据库管理系统的各种功能,包括数据存储、查询处理、事务管理、并发控制、日志记录、缓存管理等。

一条SQL语句执行流程

连接层
 (1)提供连接协议:TCP/IP 、SOCKET
 (2)提供验证:用户、密码,IP,SOCKET
 (3)提供专用连接线程:接收用户SQL,返回结果
 通过以下语句可以查看到连接线程基本情况
 mysql> show processlist;
 
SQL层
  (1)接收上层传送的SQL语句
  (2)语法验证模块:验证语句语法,是否满足SQL_MODE
  (3)语义检查:判断SQL语句的类型
   DDL :数据定义语言
   DCL :数据控制语言
   DML :数据操作语言
   DQL: 数据查询语言
   ...4)权限检查:用户对库表有没有权限
  (5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
     代价模型:资源(CPU IO MEM)的耗损评估性能好坏
  (7)执行器:根据最优执行计划,执行SQL语句,产生执行结果
 执行结果:在磁盘的xxxx位置上
  (8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
  (9)提供日志记录(日志管理章节):binlog,默认是没开启的。

存储引擎层(类似于Linux中的文件系统)
	负责根据SQL层执行的结果,从磁盘上拿数据。
 	将16进制的磁盘数据,交由SQL结构化化成表,
 	连接层的专用线程返回给用户。
一条 SQL 语句在 MySQL 中的执行流程通常包括以下步骤:

1. **客户端发送 SQL 查询**:
   客户端通过网络连接发送 SQL 查询到 MySQL 服务器。

2. **连接建立**:
   MySQL 服务器接收到客户端发送的 SQL 查询,并建立与客户端的连接。

3. **解析器解析 SQL 查询**:
   MySQL 服务器中的解析器解析客户端发送的 SQL 查询,分析语法和语义,并将其转换为内部的执行计划。

4. **优化器优化执行计划**:
   优化器对解析后的 SQL 查询进行优化,选择最佳的执行计划以提高执行效率。

5. **存储引擎执行查询**:
   MySQL 服务器根据优化后的执行计划,调用相应的存储引擎执行查询操作。

6. **锁管理器处理并发访问**:
   如果查询涉及到数据的读写操作,锁管理器负责处理并发访问,确保事务的隔离性和一致性。

7. **数据读取或修改**:
   存储引擎根据执行计划从磁盘或缓存中读取数据,或者进行数据的修改操作。

8. **日志管理器记录事务日志**:
   如果查询涉及到事务的修改操作,日志管理器负责记录事务日志,以实现事务的持久性和恢复能力。

9. **返回结果给客户端**:
   存储引擎将查询结果返回给 MySQL 服务器,MySQL 服务器再将结果返回给客户端。

10. **连接关闭**:
    客户端完成对查询结果的处理后,关闭与 MySQL 服务器的连接。

这是一条 SQL 查询在 MySQL 中的基本执行流程。在执行过程中,MySQL 会根据查询的具体情况进行优化和调整,以提高执行效率和性能。

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

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

相关文章

8868体育助力法甲巴黎圣日耳曼俱乐部 运作球员转会

法甲的巴黎圣日耳曼足球俱乐部是8868的体育助力球队之一,根据法国媒体RMC的消息,巴黎圣日尔曼仍然希望在一月份增强球队的后防实力。虽然之前球队已经从圣保罗引进了20岁的巴西中后卫卢卡斯-贝拉尔多,而这名小将也将会是巴黎圣日耳曼冬窗的一…

放假--寒假自学版 day1(补2.5)

fread 函数: 今日练习 C语言面试题5道~ 1. static 有什么用途?(请至少说明两种) 1) 限制变量的作用域 2) 设置变量的存储域 2. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始…

QML用ListView实现带section的GridView

QML自带的GridView只能定义delegate,没有section,类似手机相册带时间分组标签的样式就没法做。最简单的方式就是组合ListViewGridView,或者ListViewFlow,但是嵌套View时,子级View一般是完全展开的,只显示该…

解决dockor安装nginx提示missing signature key的问题

问题描述 使用dockor安装nginx拉取nginx的时候提示key丢失问题 问题定位 由于dockor版本低导致 问题解决 卸载重新安装最新版本dockor 解决步骤 1. 卸载旧版本的Docker: sudo yum remove docker docker-common docker-selinux docker-engine 2. 安装依赖包&am…

Stable Diffusion教程——使用TensorRT GPU加速提升Stable Diffusion出图速度

概述 Diffusion 模型在生成图像时最大的瓶颈是速度过慢的问题。为了解决这个问题,Stable Diffusion 采用了多种方式来加速图像生成,使得实时图像生成成为可能。最核心的加速是Stable Diffusion 使用了编码器将图像从原始的 3512512 大小转换为更小的 46…

【杂谈】年尾做了这件事,我后悔了.......

文章目录 前言1. 花钱1.1 购买并安装幻兽帕鲁1.2 阿里云服务器 2. 配置3. 游玩4. 总结与感悟4.1 总结4.2 感悟 后记 幻兽帕鲁多人服务器部署 趁着过年放假,一本正经地玩游戏学习服务器部署啦! 但是,部署完我就后悔了… 前言 作为一名 游戏…

shellcode

生成shellcode 在漏洞利用中,shellcode是不可或缺的部分,所以在网上有许多公开分享的 shellcode ,在不同平台上并不通用,需要选择适合的shellcode 。这里推荐两个常 见公开的安全平台:一个为公开的漏洞库exploit-db&am…

【汇编】简单的linux汇编语言程序

一、Linux系统汇编语言 Linux系统上的汇编语言可以使用不同的语法风格,主要包括Intel语法和AT&T语法。这两种语法有各自的特点和风格区别,尽管它们表示的底层机器指令相同。下面分别对两种语法进行简要说明: Intel语法 Intel语法是由I…

深入理解ES的倒排索引

目录 数据写入过程 词项字典 term dictionary 倒排表 posting list FOR算法 RBM算法 ArrayContainer BitMapContainer 词项索引 term index 在Elasticsearch中,倒排索引的设计无疑是惊为天人的,下面看下倒排索引的结构。 倒排索引分为词项索引【…

【高频前端面试题--TypeScript篇】

🚀 作者 :“码上有前” 🚀 文章简介 :前端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 高频前端面试题--Vue3.0篇 什么是TypeScript?TypeScript数据类型TypeScript中命名空…

[word] word 2010宏已被禁用警告关闭方法 #媒体#学习方法

word 2010宏已被禁用警告关闭方法 Word2010宏已被禁用警告关闭方法:在「信任中心设置」选项的宏设置中选择「禁用所有宏,并且不通知」即可。 每次打开Word 2010,都会提示「完全警告:宏已被禁用」提示。自从Word 2010安装完毕&am…

JavaScript鼠标移动事件

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 鼠标移动是用户界面中非常重要的交互行为。学习区分不同的鼠标移动事…

Vue事件中如何使用 event 对象

在Vue中,事件处理函数常常需要获取事件触发时的相关信息,比如鼠标位置、按键信息等。而要获取这些信息,就需要使用event对象。那么在Vue的事件中如何正确使用event对象呢?接下来就来详细介绍一下。 首先,在Vue的事件中…

ChatGLM2-6B模型的win10测试笔记

ChatGLM2-6B介绍: 介绍 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性: 更强大的性能:基于 ChatGLM 初…

#Js篇:js里面递归的理解

定义: 递归是一种编程技术,它是指一个函数在其定义内部调用自身的过程。 特点: 一个问题可以分解为更小的问题用同样的方法解决;分解后的子问题求解方式一样,不同的是数据规模变小;存在递归终止条件 作…

前端JavaScript篇之原型链的终点是什么?如何打印出原型链的终点?

目录 原型链的终点是什么?如何打印出原型链的终点? 原型链的终点是什么?如何打印出原型链的终点? 在 JavaScript 中,原型链是由对象和原型对象组成的链式结构。每个对象都有一个原型对象,并通过 __proto__…

ruoyi若依框架SpringSecurity实现分析

系列文章 ruoyi若依框架学习笔记-01 ruoyi若依框架分页实现分析 ruoyi若依框架SpringSecurity实现分析 文章目录 系列文章前言具体分析一、项目中的SpringSecurity版本二、登录认证流程分析三、权限鉴定四、退出登录五、SpringSecurity配置类 总结 前言 在ruoyi-vue若依框…

JavaScript综合练习2

JavaScript 综合练习 2 1. 案例演示 2. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&…

docker 基于容器创建本地web容器化镜像

一、docker 基于容器创建本地web容器化镜像 1、启动指定buysbox 镜像 docker run --name b1 -it busybox:latest 2、创建目录&#xff0c;并创建html mkdir -p /data/html vi index.html 内容自定义例如&#xff1a;<h1>welcome to busybox<h1> 3、新增窗口&am…

Kubernetes实战(二十七)-HPA实战

1 HPA简介 HPA 全称是 Horizontal Pod Autoscaler&#xff0c;用于POD 水平自动伸缩&#xff0c; HPA 可以 基于 POD CPU 利用率对 deployment 中的 pod 数量进行自动扩缩容&#xff08;除了 CPU 也可以基于自定义的指标进行自动扩缩容&#xff09;。pod 自动缩放不适用于无法…