早上出门前,马刺已经占领火箭大半城池,不出意外的话,今年的巅峰对决,会是传统与新锐的又一次史诗级别的对话。从认识马刺以来,一直被其团队精神感动,每个人都有发挥的机会,每个人都可能在某个不经意的时间点成为超级英雄。不知道为什么,从小就不是有英雄情结的少年,反倒是那些名不见经传,却往往给人意想不到的惊喜的小人物让我记忆犹新,可能那些并不具有足够天赋,多数需要坚持与付出的现实,来得更加真切一些。默默低头,寻找自己平凡生活的小小英雄梦。
今天的任务非常的简单,小采风和看官们一起,学习MySQL体系结构和MySQL主从架构,开始今天的学习之旅。
一、MySQL体系结构
话不多说,上图1:
图1:MySQL体系结构具体分析:
a)存储引擎:插件式服务,根据具体业务需要,选择合适的存储引擎;同样也可以根据实际需求,开发自己的存储引擎;存储引擎是针对于具体的表,而不是针对数据库;
b)MySQL服务器层:跨存储引擎的服务均在这层;DDL和DML执行,均在这层实现;
那么来自客户端的一条SQL语句,在MySQL的服务器内部,究竟是如何实现的呢?我们来深入了解MySQL服务层。
(1)服务器检查是否可以在查询缓存中命中:
基于Hash查找,SQL语句需要完全相同;查询缓存中的SQL语句涉及的表,即使是无关字段的更新,也会带来查询缓存中SQL的更新,具有一定的资源消耗;查询缓存时会加锁,读写频繁的系统中查询缓存使用效率低下。介于以上原因,建议关闭查询缓存。
(2)服务器端进行SQL解析,预处理,再由优化器生成对应的执行计划:
解析环节,包括使用MySQL语法校验规则验证,关键字的使用是否正确,顺序是否合理等;预处理环节,包括表和数据列是否正常存在,别名是否存在歧义等;
这里着重强调查询优化器的作用,其根据存储引擎提供的关于表的统计信息,包括行数和字段类型等,由成本模型生成最优的执行计划,其所认为的最优并不能简单等同于人眼中的最优,更为关键的是从不考虑并发环节中加锁对查询性能的影响,这一点其实并不是合理的。那么它可以实现哪些优化呢?
根据存储引擎提供的统计信息,重新定义表的关联顺序;参考where语句和库表的结构设计,将外连接转换为内连接;使用等价变化规则,简化where过滤条件中的规则;将子查询转换为关联表;提前终止查询,如limit限制输出等;
MySQL的体系结构,暂时先告一段落,让我们重振旗鼓,来到MySQL主从架构中主场地。
二、MySQL主从架构
首先,介绍一下主从架构,图2:
图2:MMM架构主从架构工作原理:
数据库服务器的访问请求,包括读(select)、写(非select)请求,其中读请求占据大量;读写请求均可在主库上进行,从库上最好只进行读请求,如果从库上进行写请求,难以保证主库从库的数据一致性;通过程序或者中间件的方式,在主库上实现读写分离,将读操作分离到从库,主库主要集中在写操作;利用程序、软件或者硬件的方式,实现从库上读操作负载均衡;
那么主库的写操作,如何同步到从库上呢?让我们一步步揭开主从复制的原理。主从复制中的主从延迟,是至关重要的概念。
现在,我们看一下主从复制的原理,如图3:
图3:主从复制原理(1)主库将更新以事件记录到二进制日志中;
(2)从库开启IO线程,与主库建立普通连接;主库开启二进制转储线程,将二进制日志中的内容发送到从库;从库IO线程收到主库的内容后,写入到从库的中继日志中;
此处需要注意的是,二进制转储线程不是轮询的,如果该线程追改上主库的更新线程,则进入sleep状态,由主库进行唤醒;二进制日志与中继日志相同;
(3)从库的SQL线程,读取并且重放中继日志中的事件,实现与主库的一致;
在主从复制的过程中,有两点需要看官们注意:
(1)读取二进制日志的两种方式:
基于日志点的读取,利用偏移量对从库进行更新,如果偏离量发生错误,则会致使主从数据的不一致;基于GTID(全局事务唯一ID)的读取,从库通知主库已经执行的GTID,主库告知从库没有执行的GTID,保证主从数据库的一致;
(2)二进制日志的两种格式:
基于statement的日志(SBR),记录一个事件中变化的行,所以日志文件小,节省网络IO,但是对于非确定性函数,无法保证主从的一致;基于row日志(RBR),记录所有行的变化,对于非确定函数也可以保证主从的一致;
小采风伸伸懒腰,离开键盘的时候,不出意外的马刺晋级总决赛,今年又是一场大战。什么算作一支强队,什么算作一种精神,马刺就是我心中的代表,永远的团队协作,永远的步调一致,永远的每个人都是王者,真正好的教练,就是能够开发每个人的潜能。莱昂纳德,平民MVP,低调的王者,后面新的期待。
关于SQL的学习,前前后后读过三本书。《SQL入门经典》《SQL必知必会》《MySQL必知必会》,相比较而言最后一本书真的是简洁清晰,一目了然。最近,重读了里面的部分章节,确实字字珠玑。如果期待进行SQL语句的学习,其确实是一本非常理想的入门级课本。
如果简短的文章对您有所帮助,记得转发哦哦,当然关注就更好啦!!!
网友评论