如果命中的记录比较多 , 应用会从MySql Server一批批获取数据
本文从MySQL中SQL语句的执行过程作为切入点,首先介绍了查询请求的执行流程,其中将MySQL的处理分为MySQL Server层和MySQL存储引擎层 。通过介绍SQL语句的流转 , 引出了后面要介绍的5大组件,他们分别是:连接器、查询缓存、分析器、优化器、执行器 。后面的内容中对每个组件进行了详细的介绍 。连接器,负责身份认证和权限鉴别;查询缓存,将查询的结果集进行缓存,提高查询效率;分析器,对SQL语句执行语法分析和语法规则,生成语法树和执行计划;优化器,包括逻辑变换和代价优化;执行器,在检查用户权限以后对数据进行逐条查询,整个过程遵守SQL语句的执行顺序 。
MySql查询语句是如何执行的1.连接服务器
通过TCP连接mysql的怎么执行,默认端口3306
2.查询缓存mysql的怎么执行,如果匹配mysql的怎么执行,则返回结果mysql的怎么执行,否则继续下一步
3.解析器Parser进行解析,包括词法解析和语法解析
4.进行预处理,优化器optimizer生成执行计划
5.执行计划调用存储引擎mysql的怎么执行的API函数 , 得到查询结果
6.查询结果返回客户端,并更新缓存
简介mysql之mysql语句执行流程 1.一条查询语句如何执行?
2.一条更新语句如何执行?
3.innodb的redolog是什么?
4.什么是写缓冲
5.写缓冲一定好吗?
6.什么情况会引发刷脏页
关于一条mysql查询语句在mysql中的执行流程
如select name from test where id=10;
1.连接器---先与mysql服务端连接器建立连接,若查询缓存命中则直接返回 (查询缓存的弊端:查询缓存的失效非常频繁 , 只要有对一个表的更新,这个表上所有的查询缓存都会被清空 。)
2.分析器---词法分析告诉服务端你要干什么(我要找 test表中id为10的名字) ( 其中sql语法错误在这块暴露 )
3.优化器---服务端会思考该怎么执行最优(索引的选择)
4.执行器---检查用户对库对表的权限
5.存储引擎--存储数据,提供读写接口
以update a set name=1 where id=1;
主要区别在于在查询到数据之后(select name from a where id=1) , 如果是innodb引擎它会进行日志的两阶段提交:
1.开启事务,写入redolog(innodb引擎特有) , 并更新内存
3.写入binlog , 提交事务 , commit
我们知道mysql数据存储包含内存与磁盘两个部分,innodb是按数据页(通常为16k)从磁盘读取到内存中的(剩余操作在内存中执行),当要更新数据时,若目标数据的数据页刚好在内存中,则直接更新 。不在呢?
将这个更新操作(也可能是插入) 缓存在change buffer中 (redolog也会记录这个change buffer操作)等到下一次查询要用到这些数据时,再执行这些操作,改变数据(称为合并操作记录称为merge) 。
innodb_change_buffer_max_size
innodb_change_buffering
先介绍两个概念
因为redolog是环形日志,当redolog写满时,就需要“擦掉”开头的一部分数据来达到循环写,这里的擦掉指,指将redolog日志的checkpoint位置从 CP推进到CP‘ ,同时将两点之间的脏页刷到磁盘上(flush操作),此时系统要停止所有的更新操作(防止更新操作丢失)
1.系统内存不足 。当要读取新的内存页时就要淘汰一些数据页,如果淘汰的正好是脏页,就要执行一次flush操作
2.Mysql认为系统处于“空闲状态”
3.正常关闭Mysql
上述后两者场景(系统空闲和正常关闭)对于性能都没太大影响 。
当为第一种redolog写满时,系统无法执行更新操作,所有操作都会堵塞
推荐阅读
- 软考工具直播课,软考培训课程
- 什么是短视频ppt课件的简单介绍
- 小米电视的网络游戏在哪里,小米电视的网络游戏在哪里打开
- 直播网红营销,直播网红的营销策略
- mysql怎么处理死锁 mysql解决死锁的三种方法
- 远程连接sqlserver数据库服务器,远程连接sql server数据库
- 餐饮如何设置区域代理加盟,餐饮如何设置区域代理加盟模式
- 银杏视频怎么下载电视,银杏视频被下架了该怎么重新下载
- vb.net网络爬虫 vba爬虫教程