暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

1、mysql服务器处理客户端请求

JAVA技术百科 2021-04-07
396

实现效果

客户端进程向服务端进程发送一段文本(sql语句),服务端进程处理后再向客户端返回一段文本(处理结果)。

在这里插入图片描述

连接管理

我们讲的服务器就是一个mysql服务器进程,一个进程占用一个端口号(mysql默认端口为3306),服务器会在3306端口监听客户端的连接。当客户端通过

mysql -h 127.0.0.1 -u root -p

进行连接服务器的时候,如果认证通过,服务器就会为客户端分配一个线程,处理该客户端的请求。当客户端断开连接的时候,服务器不会将连接的线程直接销毁,而是将它缓存起来,在下一个客户端连接时分配给新的客户端,避免了频繁创建和销毁线程的效果。

解析与优化

查询缓存

在客户端与服务器建立连接之后,不会立即去查询数据结果,首先会查询sql缓存。这个缓存会有比较多的问题:
1、当两条sql 相差一个空格,注释,大小写时,缓存就不会命中了
2、当sql中存在库函数(如函数NOW,每次调用获取最新的时间),mysql就不会对这条sql进行缓存。
3、缓存管理中会维护单独的线程,当缓存的sql中的表进行了update、insert、delete等更新操作后,会将相应的sql缓存进行清除。

小贴士:mysql的缓存管理的使用比较苛刻,在真实场景中对性能的提升比较有限,在mysql 8.0之后,已经丢弃了缓存

语法解析

这一块就涉及到词法分析、语法分析、语义分析这块,针对客户端提交的sql文本,拆解出需要操作哪个表,什么操作,对哪些数据进行操作等。

查询优化

查询优化就是生成执行计划的过程,我们可以通过explain sql语句,如(explain select * from tableName;)查询sql的执行计划,看sql的执行走了什么索引,子查询会不会优化成连接查询等。

存储引擎

我们可以通过show engines;查看数据库支持的存储引擎:

在这里插入图片描述


存储引擎主要与物理层打交道,主要负责如果提取数据,插入数据的策略,为上层提供了几十个底层函数,像"读取索引第一条内容"、"读取索 引下一条内容"、"插入记录"等等。为mysql的执行计划调用。
虽然mysql支持的存储引擎很多,但我们常用的主要为Innodb与MyIsam两种。


小结:

我们大致了解mysql处理客户端请求的主要流程,先心里有个底。



文章转载自JAVA技术百科,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论