前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >当面试官问你MySQL的架构图......

当面试官问你MySQL的架构图......

作者头像
用户7386338
发布2020-05-29 15:17:01
3730
发布2020-05-29 15:17:01
举报
文章被收录于专栏:Java患者Java患者

mysql架构图

---------------------我是一条分割线---------------------

当MySQL启动以后,初始化模块会从系统配置中读取系统参数和命令参数,初始化整个MySQL系统,同时Storage Engines(存储引擎)也会启动。

初始化结束之后,连接管理模块会监听客户端的连接请求,相当于我们的B/S架构,当我们启动服务端的程序的时候,web服务器会开始监听浏览器客户端的连接请求。当有连接请求进来的时候,会将请求转发给线程管理模块去请求一个连接线程。

线程模块就相当于一个线程池一样,接到请求后会转发到用户模块,用户模块则是对请求进行一个grant操作,通过grant后会检查是否有空闲线程,如果有就取出与客户端连接,如果没有会重新建议一个线程再连接。

MySQL请求经过命令分发和解析进行执行,在MySQL Server有属于它自己的一个cache,如果执行的请求在缓存中有数据,则会从缓存中获取到返回给连接线程模块,连接线程将数据传递给客户端,请求结束。

我们可以查看当前mysql的缓存

image-20200310225923745

如果不走cache,会转发给命令解析器根据解析结果走不同类型的模块,最后和存储引擎进行交互。

当一条命令执行完毕后,控制权都会还给连接线程模块,在上面各个模块处理过程中都依赖于核心API模块,比如:内存管理、小文件I/O,数字及字符串处理等。

MySQL的缓存机制

MySQL的缓存机制主要包括关键字缓存以及查询缓存。

概述

MySQL通过在内存中建立缓冲区buffer以及缓冲cache来提高mysql的查询性能。对于InnoDB存储引擎,MySQL采用buffer pool的方式缓存数据和索引,而对于MyISAM存储引擎,MySQL使用cache的方式缓存数据和索引。

而对于查询缓存机制,其实就是mysql缓存了sql执行语句以及查询结果,当运行了相同的sql,mysql服务器会从缓存中获取结果,而不会去转发到解析器解析并执行sql。

当然,如果表更改了。那么使用这个表的所有缓存查询都被清空。不管更改的是表中的任何数据或者是表结构的变化。所以对于频繁更改的表。查询缓存是不合适的,而对应一些不经常改变的数据并且有大量相同sql查询的表,可以相对扩大缓存区的大小,提高性能。

工作原理

当MySQL接收到传入的sql语句时,会跟先前已经在解析器解析过的sql语句进行比较,如果相同,则返回已缓存的数据。sql语句一定是完全相同,只要是要给字母的大小不同,也会受到影响。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL的缓存机制
    • 概述
      • 工作原理
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档