浅谈MySQL原理与优化(二)—— 处理引擎

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 我们来详细的分析一下处理引擎的作用。处理引擎相当于MySQL的大脑。他有三个非常重要的作用。管理理连接与线程、管理query cache、 解析SQL语句与执⾏计划⽣生成

引言

在上一篇中,我们探讨了MySQL的体系结构的组成部分。主要由客户端、处理引擎、存储引擎组成
image

现在,我们来详细的分析一下处理引擎的作用。处理引擎相当于MySQL的大脑。他有三个非常重要的作用。

管理连接与线程

mysql是采用的多线程模型,使用线程池来管理数据库的连接。线程对象被放在一个线程池中重复利用,这样可以减少重复创建对象的开销。我们可以通过thread_cache_size来设定线程池的大小,让MySQL更好的利用已有的线程连接。

image

管理query cache:

query cache是mysql一个独有的设计。MySQL会利用之前的查询结果,直接缓存结果集。简单来说,原理类似于将SQL语句和结果集作为一个个key-value键值对存储起来。如果下次有同样的查询语句,且数据库没有发生变化。MySQL并不会访问实际的表,而是会直接返回之前的结果集。注意这里的“同样的语句”即要完全一样,一个字都不能差。合理的利用query cache会得到很好的性能,当然,测试性能时query cache会带来些困扰,可以用 sql_no_cache hint 屏蔽

解析SQL语句与执⾏计划⽣生成

处理引擎会将SQL语句解析成语法树的结构,这样就可以理解语句中的字段,表,条件等信息。
image

接着,需要确定如何执行SQL语句并返回结果数据。众所周知,SQL是一个声明式的语言,用户在语句中只说明了想要的结果,并没有告诉引擎用什么样的过程去获得数据。这对于用户来说编程起来更容易,但是对于DBMS来说,增加了复杂性,执行计划需要引擎自己来确定。完成这部分工作的代码被称作优化器。

对于一个固定的查询,往往有很多种执行方式,优化器的任务就是在其中选择最优解即代价最小的一种。

这就好像是围棋AI 阿尔法狗,要从围棋可能的无数种落子中选择胜率最高的一样。
image

优化器会使用一个代价计算函数,来估算每种执行方式的时间代价,最终从若干中执行方式中,选择他认为代价最小的一种。

注意,这个代价是估算的,并不一定非常的准确,依赖的标准是数据表的一些统计信息,如果统计信息不够准确,或者优化器的估算方法并没有很好,也会造成MySQL的执行计划不是最优化的。

我们在实践中也确实会遇到这样的情况,通常会使用两种方法来解决

  1. 使用hint来提示mysql用更好的执行计划
  2. 简化语句,让MySQL更容易的估算代价。

以上是MySQL执行引擎的介绍和解析,希望对大家的日常工作,能有更好的帮助。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
3天前
|
SQL 存储 关系型数据库
MySQL原理简介—1.SQL的执行流程
本文介绍了MySQL驱动、数据库连接池及SQL执行流程的关键组件和作用。主要内容包括:MySQL驱动用于建立Java系统与数据库的网络连接;数据库连接池提高多线程并发访问效率;MySQL中的连接池维护多个数据库连接并进行权限验证;网络连接由线程处理,监听请求并读取数据;SQL接口负责执行SQL语句;查询解析器将SQL语句解析为可执行逻辑;查询优化器选择最优查询路径;存储引擎接口负责实际的数据操作;执行器根据优化后的执行计划调用存储引擎接口完成SQL语句的执行。整个流程确保了高效、安全地处理SQL请求。
106 75
|
2天前
|
存储 SQL 缓存
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
|
1天前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
|
15天前
|
监控 关系型数据库 MySQL
Aurora MySQL负载突增应对策略与优化方案
通过以上策略,企业可以有效应对 Aurora MySQL 的负载突增,确保数据库在高负载情况下依然保持高性能和稳定性。这些优化方案涵盖了从架构设计到具体配置和监控的各个方面,能够全面提升数据库的响应速度和处理能力。在实际应用中,应根据具体的业务需求和负载特征,灵活调整和应用这些优化策略。
45 22
|
1月前
|
SQL 关系型数据库 MySQL
MySQL派生表合并优化的原理和实现
通过本文的详细介绍,希望能帮助您理解和实现MySQL中派生表合并优化,提高数据库查询性能。
69 16
|
1月前
|
SQL 关系型数据库 MySQL
MySQL派生表合并优化的原理和实现
通过本文的详细介绍,希望能帮助您理解和实现MySQL中派生表合并优化,提高数据库查询性能。
37 7
|
30天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(05)突击MVCC核心原理 | 左右护法ReadView视图和undoLog版本链强强联合
2024年小结:感谢阿里云开发者社区每月的分享交流活动,支持持续学习和进步。过去五个月投稿29篇,其中17篇获高分认可。本文详细介绍了MySQL InnoDB存储引擎的MVCC机制,包括数据版本链、readView视图及解决脏读、不可重复读、幻读问题的demo演示。
|
19天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
153 0
|
15天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决