MySQL技术细节
逻辑架构
主要分为三个部分
查询过程
大致的过程:
1)客户端向服务端发起一条请求
2)服务端先检查查询缓存,如果命中缓存,则直接返回结果,否则交给下一阶段
3)服务器进行SQL解析,预处理,在经过查询优化形成对应的执行计划
4)mysql根据执行计划,调用API给存储引擎,进行数据的读取和存储
5)将结果返回给客户端,并缓存查询结果
MySQL使用自定义的应用层协议进行通信。这个协议运行在TCP/IP协议之上,用于客户端和服务器之间的数据交换。在大多数情况下,默认的MySQL端口是3306。MySQL协议包括用于查询、认证、错误报告和数据传输的各种命令。此协议支持灵活的数据编码,并且能够处理各种数据类型,如字符串、二进制数据和数值。此外,MySQL协议还支持SSL/TLS,为客户端和服务器之间的数据传输提供加密保护。
MySQL的协议不是基于文本的简单协议,而是一个更复杂的二进制协议,需要特定的客户端来正确编码和解码通信内容。
连接
分为短连接和长连接
短连接在数据传输完毕之后就会释放,长连接会一直占用资源
连接池
数据库的连接是比较影响性能,所以使用连接池的目的也是尽量少的创建连接,然后又要避免去维护很多空闲的连接
当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。
在需求减少时,许多连接池实现会自动减少连接数。这通常是通过以下两种机制之一实现的:
-
空闲连接超时:连接池通常有一个参数来设置连接的最大空闲时间。如果一个连接在指定的时间内没有被使用,那么它会被关闭并从连接池中移除。这样,当需求降低时,那些不再需要的空闲连接就会被自动关闭,从而减少资源的占用。
-
定期清理:有些连接池实现会定期检查池中的连接,并关闭那些长时间未使用的连接。这种机制可以帮助确保连接池不会保持比实际需要更多的连接。
表分区
分为横向分区和纵向分区
横向只是把行分开,纵向是把column分开了,改变了表结构。MySQL不支持纵向分区。
优点
- 可以按照时间分区,用于分割表的查询
- 分区可以在不同的硬盘上
- 更容易维护(增加删除特定分区)
限制 - 一个表中只能有1024个分区
Reference
[彻底弄懂mysql(一)--mysql的通信协议_mysql 查询 是http请求吗-CSDN博客]
title: "彻底弄懂mysql(一)--mysql的通信协议_mysql 查询 是http请求吗-CSDN博客"
image: "https://img-blog.csdnimg.cn/20190412190336899.png"
description: "文章浏览阅读1.9w次,点赞16次,收藏54次。我准备从mysql的实现出发,将mysql好好理解一下,从他的逻辑结构一层一层出发,感受一下,所以再学第一层之前,要先对mysql整体的逻辑结构有一个初步认识mysql逻辑架构整体来说,MySql的逻辑架构分成三个部分,这个之前我以为提到过1)客户端:主要是建立连接的过程,交互的过程2)核心服务3)存储引擎这个可能比较抽象,我们结合MySql的查询过程,结合着进行学习MySql查询..._mysql 查询 是http请求吗"
url: "https://blog.csdn.net/LYue123/article/details/89256577"
[彻底弄懂mysql(二)--连接方式_mysql等待和连接策略-CSDN博客]
title: "彻底弄懂mysql(二)--连接方式_mysql等待和连接策略-CSDN博客"
image: "https://img-blog.csdnimg.cn/2019041316421254.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xZdWUxMjM=,size_16,color_FFFFFF,t_70"
description: "文章浏览阅读2k次。对数据库的连接是一个很耗时的过程,tcp的连接也分为长连接和短连接,这都是为了满足不同的需求而产生的,mysql也不止一种连接方式,接下来我们介绍一下短连接短连接应该比较好理解,就是只要客户端与服务端进行任何数据传输的话就会建立一次连接,数据传输完毕之后就释放这个连接,下一次再请求就再建立连接,所以有可能一个session就与数据库建立了十几次甚至更多的连接,这种情况下如果数据访问量非常大时,..._mysql等待和连接策略"
url: "https://blog.csdn.net/LYue123/article/details/89285157"
[mysql--表分区,分表技术_表分区 where语句中包含分区条件-CSDN博客]
title: "mysql--表分区,分表技术_表分区 where语句中包含分区条件-CSDN博客"
image: "https://csdnimg.cn/release/blogv2/dist/mobile/img/iconLeftArrow.png"
description: "文章浏览阅读224次。表分区,分表mysql中表分区与分表是两个不同的概念,不能混为一谈分表:指的是通过一定的规则,将一张表分解成多张不同的表。表分区:是指按照一定的规则,将数据库中的一张表分解成多个更小的,容易管理的部分分表与表分区的区别从逻辑上看,分区只有一张表,而分表有多张表表分区分区一般是两种 横向分区和纵向分区横向分区:什么是横向分区呢?就是横着来分区了,举例来说明一下,假如有100W条数据,..._表分区 where语句中包含分区条件"
url: "https://blog.csdn.net/LYue123/article/details/88418262"