当前位置:网站首页>MySQL-执行流程+缓存+存储引擎
MySQL-执行流程+缓存+存储引擎
2022-08-02 07:00:00 【kk_lina】
目录
一、服务器处理客户端请求
注意:mysql8.0版本中查询缓存去掉
- 连接层:验证用户名和密码等身份认证。
- 服务层:sql interface:sql接口,接收命令并且返回结果;parse解析器:语法、语义解析;optimizer优化器:生成执行计划;caches & buffers:查询缓存组件,5.7版本中会先从缓存组件中进行语句查询,如果有则直接返回,没有则继续语法解析,存储引擎执行之后得到的数据会先缓存在缓存组件中,达到一定数量时再返回给客户端。
- 引擎层:对sql语句对数据库进行相关操作。
二、sql执行流程
- 查询缓存:是否打开query_cache_type,如果打开查看是否命中缓存,是的话直接返回结果。mysql8.0抛弃该功能,命中率太低,语句增加一个空格都无法命中,函数的调用和修改表结构和数据时会触发缓存失效。
-- 查看是否开启查询缓存 show variables like '%query_cache_type'; -- 在配置文件中开启查询缓存 0-关闭查询缓存 1-开启 2-demand(按需使用) query_cache_type=2 -- 监控查询缓存命中率 show status like'%Qcache';
- 解析器:在解析器中对sql语句进行语法分析、语义分析。分析出关键字、表名等,根据语法分析器来判断sql是否满足mysql语法。
- 优化器:确定sql执行成本最低,选择索引操作,选择出最好的执行计划。分为逻辑查询优化(sql写法)和物理查询优化(索引选择、表连接) 。
- 执行器:判断用户是否有权限,调用存储引擎api将结果返回到查询缓存,全部查询完毕返回给客户端。
-- 查看是否开启记录sql执行过程 select @@profiling; show variables like 'profiling'; -- 临时修改 永久修改设置在配置文件中 set profiling=1; -- 查看最近执行语句 show profiles; -- 查看指定语句执行情况 show profile for query 7;
三、缓冲池
- innodb存储形式为数据页形式,默认16kb大小;
- innodb缓冲池包括数据页、索引页、插入缓存、锁信息、自适应Hash和数据字典等信息;
- 缓存原则:“位置*频次”,位置决定效率,在内存中直接访问数据;频次决定优先级,缓冲池与内存存储大小小于磁盘数据时,优先使用频次高的热数据进行加载;
- 预读特性:缓冲池内存允许的情况下,预先读取数据页前后数据事先缓存在缓冲池中;
- 缓冲池读取数据:
-- 查看缓存池大小
show variables like '%innodb_buffer_pool_size%';
- 多线程情况下访问bufferPool需要加锁,可以一个缓冲池拆解成多个小的缓存池
-- 启动服务器时设置个数 [server] innodb_buffer_pool_instances = 2 -- 查看缓冲池个数 show variables like 'innodb_buffer_pool_instances';
- 脏数据/脏页:在更新操作时,缓冲池不存在该数据时需要从磁盘中读取数据,在缓冲池进行修改,修改完后缓冲池内数据与磁盘数据不一致;
四、存储引擎
-- 查看存储引擎
show engiens;
-- 设置存储引擎(临时)
set default_storage_engine=MyISAM;
-- 设置存储引擎(永久)
default-storage-engine=MyISAM;
-- 重启服务
systemctl restart mysqld.service;
- innodb支持外键、事务,在5.5版本后默认为存储引擎,具有行锁,高并发时效率高。对内存要求高,处理增加和查询效率低,占用磁盘空间存储索引和数据。
- myisam不支持外键、事务,只支持表级锁,崩溃后无法恢复,5.5之前默认存储引擎,select和insert速度比innodb大,数据和索引分开存储,数据量不大的时候读和写建议使用myisam。
- archive用于数据存档,5.5之后支持索引,不支持修改,压缩性能好,使用行级锁,适合日志和数据采集类应用。
- csv可以转换为csv文件,数据交换机制
边栏推荐
- FormData上传二进制文件、对象、对象数组
- 聊天机器人如何提升独立站的营销水平?
- PWA 踩坑 - 第一次加载页面后无法获取CacheStorage某些资源
- WebGPU 导入[2] - 核心概念与重要机制解读
- Facebook社媒营销的5大技巧,迅速提高独立站转化率!
- Ask a question, my Flinkcdc has run through, I can monitor the binlog of msql, and I can also send kafk
- spark架构
- 有趣的网站
- MQ带来的一些问题、及解决方案
- 论文阅读 (64):Weakly-supervised Video Anomaly Detection with Robust Temporal Feature Magnitude Learning
猜你喜欢
【图像去噪】基于matlab双立方插值和稀疏表示图像去噪【含Matlab源码 2009期】
MySQL-FlinkCDC-Hudi enters the lake in real time
自然语言处理 文本预处理(上)(分词、词性标注、命名实体识别等)
OC-error prompt
新产品立大功 伟世通第二季度营收双增
2022.07.31(LC_6133_分组的最大数量)
LeetCode 2312. 卖木头块
MySQL报错1055解决办法:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains
(2022牛客多校五)D-Birds in the tree(树形DP)
MySQL-慢查询日志
随机推荐
Swagger的简单介绍,集成,以及如何在生产环境中关闭swagger,在测试和开发环境中自动打开
【云原生】如何快速部署Kubernetes
(2022牛客多校五)C-Bit Transmission(思维)
PWA 踩坑 - 第一次加载页面后无法获取CacheStorage某些资源
OC-NSSet(集合)
请教一下,Flink SQL ,JDBC sink 入 mysql 库,想要搞一个自增主键,要怎么写
【机器学习】课程设计布置:某闯关类手游用户流失预测
图腾柱和推挽电路介绍
张驰课堂:六西格玛测量系统的误差分析与判定
WebGPU 导入[2] - 核心概念与重要机制解读
ADS通信--倍福PLC和C#TextBox控件实现数据绑定的方法
【杂】pip换国内源教程及国内源地址
Splunk Filed extraction field interception
OC-NSString
队列题目:无法吃午餐的学生数量
正则表达式的理解学习
【机器学习】实验3布置:贝叶斯垃圾邮件识别
mysql操作入门(四)-----数据排序(升序、降序、多字段排序)
【ROS基础】map、odom、base_link、laser 的理解 及其 tf 树的理解
OC-范畴