MySQL架构

复杂的架构是为了更好的工作,架构中的每一个角色都可以高效的单独处理一类事件,辅助整个系统的流畅运行,举个例子:

每天有很多人拜访市长,为了能合理的给市长安排拜访工作,需要对拜访流程做出复杂设计,比如先要在门卫处做身份认证、由传达室负责接通电话确认是否可以访问、市长办公室负责接待、你可能需要排队等候、你的事情如果办公室就能解决可能就不用见市长了,最后轮到你了,你才能见上市长,整个拜访流程就是设计的架构。

对于MySQL来说,虽然经历了多个版本迭代(MySQL5.5,MySQL 5.6,MySQL 5.7,MySQL 8),但每次的迭代,都是基于MySQL基架的,MySQL基架大致包括如下几大模块组件,如下图:



(1)MySQL向外提供的交互接口(Connectors)

Connectors组件,是MySQL向外提供的交互组件,如java,.net,php等语言可以通过该组件来操作SQL语句,实现与SQL的交互。通过客户端/服务器通信协议与MySQL建立连接。MySQL 客户端与服务端的通信方式是 “ 半双工”。对于每一个 MySQL 的连接,时刻都有一个线程状态来标识这个连接正在做什么。

(2)管理服务组件和工具组件(Management Service & Utilities)

提供MySQL的各项服务组件和管理工具,如备份(Backup),恢复(Recovery),安全管理(Security)等功能。

(3)连接池组件(Connection Pool)

负责监听客户端向MySQL Server端的各种请求,接收请求,转发请求到目标模块。每个成功连接MySQL Server的客户请求都会被创建或分配一个线程,该线程负责客户端与MySQL Server端的通信,接收客户端发送的命令,传递服务端的结果信息等。

(4)SQL接口组件(SQL Interface)

接收用户SQL命令,如DML,DDL和存储过程等,并将最终结果返回给用户。

(5)查询分析器组件(Parser)

首先分析SQL命令语法的合法性,并进行抽象语法树解析,如果sql有语法错误,会抛出异常信息。

(6)优化器组件(Optimizer)

对SQL命令按照标准流程进行优化分析,mysql会按照它认为的最优方式进行优化,选用成本最小的执行计划。

(7)缓存主件(Caches & Buffers)

缓存和缓冲组件,这里边的内容我们后边会详细的讲解。

(8)MySQL存储引擎

MySQL属于关系型数据库,而关系型数据库的存储是以表的形式进行的,对于表的创建,数据的存储,检索,更新等都是由MySQL存储引擎完成的。MySQL存储引擎在MySQL中扮演着重要角色。研究过SQL Server和Oracle的读者可能很清楚,这两种数据库的存储引擎只有一个,而MySQL的存储引擎种类比较多,如MyIsam存储引擎,InnoDB存储引擎和Memory存储引擎。

因为mysql本身就是开源的,他允许第三方基于MySQL骨架,开发适合自己业务需求的存储引擎。从MySQL存储引擎种类上来说,可以分为官方存储引擎和第三方存储引擎,比较常用的存储引擎包括InnoDB存储引擎,MyIsam存储引擎和Momery存储引擎。

查询流程大致如下:



小问题:MySQL8.0为什么取消了查询缓存?

【MySQL缓存机制】简单的说就是缓存sql文本及查询结果,如果运行完全相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL。但如果表中任何数据或是结构发生改变,包括INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,那么使用这个表的所有缓存查询将不再有效,查询缓存中相关条目被清空。缓存是对系统性能优化的重要手段。但是有经验的DBA都建议生产环境中把MySQL Query Cache关闭。MySQL8.0更是直接取消了查询缓存,其原因有下:

●MySQL会对每条接收到的SELECT类型的查询进行hash计算,然后查找这个查询的缓存结果是否存在。虽然hash计算和查找的效率已经足够高了,一条查询语句所带来的开销可以忽略,但一旦涉及到高并发,有成千上万条查询语句时,hash计算和查找所带来的开销就必须重视了。
●查询语句的字符大小写、空格或者注释的不同,Query Cache都会认为是不同的查询(因为他们的hash值会不同)。
●当向某个表写入数据的时候,必须将和这个表相关的所有缓存设置为失效,如果缓存内容很多,则消耗也会很大,可能使系统僵死,因为这个操作是靠全局锁操作来保护的。

当然还有一些其他原因,我们学习的过程中慢慢体会。

  • 60
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值