Mysql学习笔记一:组成部分及一次交互

Mysql学习笔记一:

	Mysql有哪些部分组成呢?以及它们各自的作用?
	一次与数据库的交互式如何产生的?

Mysql的组成

Mysq总共分为server层和存储引擎层,其中server层包括连接器,查询缓存,分析器,优化器,执行器,内置的各种函数(如数字,日期,时间等等),所有跨存储引擎的功能也都在这一层实现,比如视图,存储过程等。

  1. 连接器,管理用户与客户端建立的连接,校验用户的信息以及权限,之后连接中的所有权限判断逻辑都基于此次查到的权限(管理员新设置的权限,重新连接才会生效),连接有长连接和短连接,故名意思,长连接长时间处于连接状态,如果所有的查询都是长连接,占用内存会比较大,严重会导致数据库重启。

    1.1处理长连接的两种方法:
    	定期断开长连接,或者使用mysql_reset_connection,重新建立连接(5.7版本后)
    
  2. 查询缓存,建立连接后,开启缓存的情况下,如果是select语句,会查询缓存,命中会直接返回结果,否则继续进行下步操作。如果是更新操作,会把跟这个表有关的缓存内容全部置为失效。Mysql8.0删除的缓存的功能。

  3. 分析器,分析sql语句,包括关键字,表以及字段,校验是否符合规范,表和字段是否存在,如果有问题,返回错误信息

  4. 优化器,对sql语句的索引等信息进行优化,找到效率最高的执行方式,以及其他的优化,确定最终执行的方案。

  5. 执行器,执行sql语句,如果用户没有操作该表的权限,则进行错误信息提示。

  6. 存储引擎,存储引擎存储数据,提供读写的接口以便server调用,支持Memory,MyISAM和InnoDB等引擎,5.5.5版本后默认使用InnoDB存储引擎,Mysiam不支持事务,InnoDB支持事务,InnoDB的底层数据结构是B+Tree。

执行一次查询语句

1.连接器检验客户的信息,与客户端建立连接后,首先去缓存中进行查询是否能够命中,缓存中的数据是以sql语句为key,查询结果为value进行存储的,命中后直接返回数据
2.分析器会对sql语句进行分析,语法,关键字,表以及字段是否正确,有有问题则返回错误提示信息;
3.分析器分析完成后,优化器会对sql语句进行优化,优化索引的等等信息;
4.执行器执行sql语句,查询到结果后返回给客户端。

执行一次更新语句

1.连接器检验客户的信息及权限,检验通过后,经过分析器的分析和优化器的优化,执行器开始执行sql,通过索引先查询存储引擎内存中是否符合改条件的页的行数据,如果无,需要查询磁盘(IO操作),将查询的结果存入内存后,将结果返回给执行器;
2.执行器对结果进行更新操作后,调用引擎写接口入数据;
3.存储引擎拿到结果后,结果存入内存,并生成redo log日志,并且日志处于prepare状态,并告知执行器,已经执行完了,可以随时提交事务;
4.执行器生成binlog 日志存入物理硬盘;
5.执行器调用引擎的提交事务接口,并将redo log日志的状态改为commit,更新完成。

上面提到的两种重要的日志

redo log

重做日志,存储引擎InnoDB独有的日志,记录每次操作的sql语句,是循环记录模式,用的是WAL(Wirite-Ahead Logging)先记录日志,等空闲的时候再写入磁盘标,InnoDB的redo log大小是固定的,比如总共有四个文件,每个文件的大小为1G,总共能存储4G的数据,从头写到尾,循环往复,有两个标记点write pos 和check point,write pos记录要存入的位置,check point记录要检查的位置,将日志的文件写入磁盘,两个标记点中间的空余位置用于保存日志数据。有crash-safe的功能,可以恢复数据。

binlong

归档日志,server层的日志,所有存储引擎都能用的日志,是逻辑日志,新的日志会追加到原来的日志后面,文件大小不是固定的。没有crash-safe的功能。有两种记录方式,statements记录的sql语句,rows方式记录更新前的数据和更新后的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值