【MySQL】MySQL服务器如何处理客户端请求

MySQL运行过程?

  • MySQL的服务器程序直接与要存储的数据打交道。

  • 首先,多个客户端程序,可以连接到MySQL的服务器程序,向服务器程序发送增删改查的请求。

  • 然后,服务器程序根据这些请求,对存储的数据进行相应处理。

MySQL服务器 如何 处理客户端请求:

  1. 连接管理主要负责连接的建立与信息的认证。

    • 客户端:客户端进程采用TCP/IP、命名管道或共享内存、UNIX域套接字等几种方式与服务器进程建立连接。

    • 服务器端:每当有一个客户端进行连接到服务器进程时,服务器进程都会创建一个线程专门处理与这个客户端的交互;

    • 当该客户端退出时,会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁,而是把它缓存起来,再另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端。这样就不用频繁地创建和销毁线程,从而节省了开销。

  2. 解析与优化主要进行查询缓存、语法解析、查询优化。

    • 查询缓存。MySQL服务器程序,会把刚处理过的查询请求和结果缓存起来,如果下次有同样的请求过来,直接从缓存中查找结果即可。

    • 语法解析。如果查询缓存没有命中,则,正式查询。MySQL服务器程序,首先对请求进行分析,判断请求的语法是否正确,然后从请求中将要查询的表、各种查询条件都提取出来放到MySQL服务器内部使用的一些数据结构上。

      本质:从指定请求中提取出需要的信息算是一个编译过程,涉及 词法解析、语法分析、语义分析等阶段。

    • 查询优化。MySQL的优化程序会对我们的语句做一些优化,如外连接转换为内连接、表达式简化、子查询转为连接等。优化的结果是生成一个执行计划。此执行计划表明了应该使用哪些索引执行查询,以及表之间的连接顺序等。

  3. 存储引擎主要负责读取和写入底层表中的数据。

    • 存储引擎功能:接收上层传下来的指令,对表中的数据进行读取或写入操作。

总述,MySQL服务器处理请求的过程,简单划分为 server层存储引擎层

  • server层:连接管理、查询缓存、语法解析、查询优化这些不涉及真实数据存取的功能。

  • 存储引擎层存取真实数据的功能。

各种不同的存储引擎为server层提供统一的调用接口,其中包含了几十个不同用途的底层函数,比如“读取索引第一条记录”,“读取索引下一条记录”,“插入记录”等。

所以在server层完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的接口获取到数据后返回给客户端。

注意,server层和存储引擎层交互时,一般是以记录为单位。

——读书笔记,摘自《MySQL是怎样运行的》

猜你喜欢

转载自blog.csdn.net/xiaoyue_/article/details/130621455