返回博客列表

MySQL技术细节

2024年1月18日
5 min read
MySQL数据库技术

逻辑架构

主要分为三个部分

MySQL逻辑架构图

查询过程

大致的过程: 1)客户端向服务端发起一条请求 2)服务端先检查查询缓存,如果命中缓存,则直接返回结果,否则交给下一阶段 3)服务器进行SQL解析,预处理,在经过查询优化形成对应的执行计划 4)mysql根据执行计划,调用API给存储引擎,进行数据的读取和存储 5)将结果返回给客户端,并缓存查询结果

MySQL查询过程流程图

[!quote] GPT MySQL使用自定义的应用层协议进行通信。这个协议运行在TCP/IP协议之上,用于客户端和服务器之间的数据交换。在大多数情况下,默认的MySQL端口是3306。MySQL协议包括用于查询、认证、错误报告和数据传输的各种命令。此协议支持灵活的数据编码,并且能够处理各种数据类型,如字符串、二进制数据和数值。此外,MySQL协议还支持SSL/TLS,为客户端和服务器之间的数据传输提供加密保护。

MySQL的协议不是基于文本的简单协议,而是一个更复杂的二进制协议,需要特定的客户端来正确编码和解码通信内容。

连接

分为短连接长连接 短连接在数据传输完毕之后就会释放,长连接会一直占用资源

连接池 数据库的连接是比较影响性能,所以使用连接池的目的也是尽量少的创建连接,然后又要避免去维护很多空闲的连接

当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。

[!quote] GPT 在需求减少时,许多连接池实现会自动减少连接数。这通常是通过以下两种机制之一实现的:

  1. 空闲连接超时:连接池通常有一个参数来设置连接的最大空闲时间。如果一个连接在指定的时间内没有被使用,那么它会被关闭并从连接池中移除。这样,当需求降低时,那些不再需要的空闲连接就会被自动关闭,从而减少资源的占用。

  2. 定期清理:有些连接池实现会定期检查池中的连接,并关闭那些长时间未使用的连接。这种机制可以帮助确保连接池不会保持比实际需要更多的连接。

表分区

分为横向分区和纵向分区 横向只是把行分开,纵向是把column分开了,改变了表结构。MySQL不支持纵向分区。

优点

  • 可以按照时间分区,用于分割表的查询
  • 分区可以在不同的硬盘上
  • 更容易维护(增加删除特定分区) 限制
  • 一个表中只能有1024个分区

参考资料

  1. 彻底弄懂mysql(一)--mysql的通信协议
  2. 彻底弄懂mysql(二)--连接方式
  3. mysql--表分区,分表技术

评论讨论

使用 GitHub 账号登录参与讨论

加载评论中...