龙空技术网

深度理解mysql(一) Mysql整体架构

IT果果日记 254

前言:

今天小伙伴们对“mysql构架”都比较注意,咱们都需要剖析一些“mysql构架”的相关内容。那么小编同时在网摘上网罗了一些关于“mysql构架””的相关资讯,希望兄弟们能喜欢,你们一起来了解一下吧!

一.概述

作为一个后端开发人员,mysql在项目中有着举足轻重的地位,深入理解mysql的内部原理,才能让我们在线上快速排查和定位问题,写出质量高的sql语句,而不是天天陷入crud中,本系列文章讲讲解

1.mysql整体架构

2.存储引擎的整体架构

3.锁和事务

4.执行计划

5.生产环境mysql优化和问题排查

在后面的时间里,会利用下班时间来逐步写mysql的系列文章,不足之处还请大家批评指正

二.mysql整体架构

2.1 程序是怎样执行的

我们系统部署后,当用户发送请求到tomcat时候,tomcat会开启一个线程来处理请求,当要执行mysql语句的时候,就需要和数据库简历连接,发送请求,断开连接, 每一次新建和断开连接都需要进行三次握手和四次挥手操作,很占用系统资源,这个时候就会使用连接池,达到连接的复用,如下图所示:

2.2 SQL接口:接收处理sql

mysql通过监听socket后,获取客户端发送的请求数据,会把sql都教给sql接口来处理,sql接口内部会有很多模块,先把整体模块整理如下图:

2.3 SQL解析器:让mysql能看懂sql语句

如果我们执行一条sql语句select id,name,age from users where id=1;这是我们人能看懂的语句,但是对于数据库而言,他是看不懂的,这个时候就需要查询解析器了这个查询解析器(Parser)就是负责对SQL语句进行解析的,比如对上面那个SQL语句进行一下拆解,拆解成以下几个部分:

*我们现在要从“users”表里查询数据

*查询“id”字段的值等于1的那行数据

*对查出来的那行数据要提取里面的“id,name,age”三个字段。

所谓的SQL解析,就是按照既定的SQL语法,对我们按照SQL语法规则编写的SQL语句进行解析,然后理解这个SQL语句要干什么事情.

2.4 查询优化器:选择最优的查询路径

当解析出sql后,就会通过查询优化器来选择一个最优的查询路径;

何为最优查询呢?

举例select id,name,age from users where id=1;可能有以下两种情况(举例而已,不代表mysql真原理)

1.直接定位users表的数据的id=1的那行数据,然后取出这个三个字段

2.先把每一条数据的id,name,age字段取出来,然后依次去比较id是否等于1

完成一个sql的查询,通常会有多种路径,就像条条道路通罗马,但是其中肯定有最省事的方式,查询优化器就是干这件事情的,会针对你写的复杂的sql生成查询路径树,从中间选择一个最优的路径来查询,会告诉你一个步骤和顺讯,来一步步执行sql语句

2.5 执行器:

通过查询优化器获取执行计划后,为什么不能直接调用存储引擎查数据呢? 这是应为mysql可不是只有一种存储引擎,比如最常见的就有Mysam,Innodb,memory,要选择不同的存储引擎来调用,这个执行器会根据优化器选择的执行方案,去调用存储引擎的接口按照一定的顺序和步骤,就把SQL语句的逻辑给执行了。举个例子,比如执行器可能会先调用存储引擎的一个接口,去获取“users”表中的第一行数据,然后判断一下这个数据的“id”字段的值是否等于我们期望的一个值,如果不是的话,那就继续调用存储引擎的接口,去获取“users”表的下一行数据。就是基于上述的思路,执行器就会去根据我们的优化器生成的一套执行计划,然后不停的调用存储引擎的各种接口去完成SQL语句的执行计划,大致就是不停的更新或者提取一些数据出来,如下图所示:

2.6 存储引擎

存储引擎就是存储数据的,供上层的模块来调用,数据存放无非有两种

1.存储内存中 2.存储在磁盘中

那么现在问题来了,我们已经知道一个SQL语句要如何执行了,但是我们现在怎么知道哪些数据在内存里?哪些数据在磁盘里?我们执行的时候是更新内存的数据?还是更新磁盘的数据?我们如果更新磁盘的数据,是先查询哪个磁盘文件,再更新哪个磁盘文件?是不是感觉一头雾水

所以这个时候就需要存储引擎了,存储引擎其实就是执行SQL语句的,他会按照一定的步骤去查询内存缓存数据,更新磁盘数据,查询磁盘数据,等等,执行诸如此类的一系列的操作,如下图所示。

三.总结:

通过上面的介绍,我们知道一个sql的执行,大致分为 解析器,优化器,执行器,存储引擎; 但是在mysql中解析器,优化器,执行器其实是通用的,就是一套组件而已,存储引擎是各种各样的,比如InnoDB,MyISAM,Memory, 不同的存储引擎是不同的,他们执行sql的数据也是不一样的

在后面的章节中我们会继续详细分析的.

作者:relax_peng

链接:

#记录我的2024#

标签: #mysql构架 #mysql架构有哪些 #mysql部署架构