MySQL:网络连接框架简析

MySQL:网络连接框架简析,第1张

一直对这部分不太了解,稍微看了一下,但由于知识储备有限,错误在所难免。

总的看起来MySQL在这部分依旧使用了常规的 reactor+线程池 高并发网络模型,这里我们以poll为列,有如下特点:

貌似看起来大佬的手法都是通用的,都是按照一定模式写出来的。当然实际上涉及的东西还是非常多,但是这里我们仅仅了解网络框架部分,对于线程池\vio通信模块\net协议模块不做讨论,因为我也不了解,这里主要看看网络框架。

对于用户会话线程通常叫做thread_one_connection,接着会调用thd_prepare_connection->login_connection将准备对连接fd进行ppoll的超时参数设置为connect_timeout指定的值,也就是言外之意connect_timeout是在处理连接请求的时候生效的参数。

然后thd_prepare_connection->login_connection->check_connection,在函数check_connection中完成主要任务是:

在login_connection的末尾会将连接fd的ppoll的timeout参数设置为read_timeout/write_timeout。

最后接下来就是进行命令处理的环节了。也就是do_command。通常我们的会话就堵塞在这里等待客户端命令的到来如下:

mysql底层架构分为:

1、client(客户端)

2、server(服务端)

client: 主要有各种plugin、jdbc等

server: 包含了连接器、查询缓存、分析器、优化器、执行器、存储引擎

连接器 的主要作用是与 客户端 建立联系,管理客户端的连接、会话、权限验证等。

查询缓存 的作用是,在sql通过连接器之后到达服务端之后,如果sql是sel开头的语句,那么先在 查询缓存 中获取命中结果,如果有命中结果则直接返回结果。没有结果那么sql会通往 分析器 。

分析器 拿到sql后,会对sql进行词法、语法分析,同时创建sql Id,如果sql有错误,那么将会终止sql行为,将异常返回客户端。

优化器 的作用主要是对通过 分析器 的sql进行优化,比如进行 索引选择 、 重写查询 等,同时会创建 sql执行计划 ,可以通过 explain 指令进行查看。

执行器 拿到了经过优化器的sql,将会 *** 作 存储引擎 ,通过调用 存储引擎 提供的读写接口,得到返回结果。

存储引擎 是sql的最终执行者,它对外提供了读写接口,本身主要作用为执行sql、存储数据、获取数据等, 存储引擎 的设计是插件形式实现的,常见了有 InnoDB 、 MyISAM 等。

未完待续......


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7677166.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存