怎样分析MySQL体系架构

技术怎样分析MySQL体系架构这篇文章将为大家详细讲解有关怎样分析MySQL体系架构,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。要了解mysql的运行机制,那么首先要对

本文将详细解释如何分析MySQL架构。文章内容质量很高,我就分享给大家作为参考。希望大家看完这篇文章后对相关知识有一定的了解。

要了解mysql的运行机制,首先要对mysql的架构有一定的了解。

由于最近的一些事件,我受到了很大的打击,我觉得我可能会更加努力,我的职业生涯也会是这样。因此,我突然失去了原来学习技术和写博客的热情。

但无论如何,我自己选择了这条路,哭着也要走完。另外,目前似乎没有别的路可走。

mysql体系结构

怎样分析MySQL体系架构

mysql的架构如图所示。可以看出,MySQL由以下几个部分组成:

连接池组件

管理服务和工具组件。

SQL接口组件

查询分析器组件

优化器组件

缓存组件。

插入式存储引擎

物理文件

说明:

MySql区别于其他数据库的最重要的特性之一是它的插件式的表存储引擎.

需要注意:

存储引擎是基于表的,而不是基于数据库。

基于这样的特点,项目中的大部分业务数据库都需要支持事务属性,因此采用了InnoDB存储引擎。但是对于那些具有只读特性的表,我们可以考虑使用MyISAM存储引擎,这样不会破坏数据库的事务特性。

详细说明

的顶层是连接组件。以下服务器由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎和文件系统组成。

连接池:由于每次设置都要花费很多时间,连接池的功能就是缓存这些连接,建立的连接下次可以直接使用,提高服务器性能。管理工具和服务:系统管控工具,如备份恢复、Mysql复制、集群等。SQL接口:接受用户的SQL命令,并返回用户需要查询的结果。例如,从调用SQL接口查询解析器:的方式中选择。当SQL命令被传递给解析器时,它将被解析器验证和解析(权限、语法结构)。

主要功能:

A.将SQL语句分解成一个数据结构,并将这个结构传递给后续的步骤,然后SQL语句的传输和处理就是基于这个结构。

B.如果在分解和组合中遇到错误,那么这个sql语句就是不合理的查询优化器:查询优化器,它将用于在查询之前优化查询。他用“选取-投影-联接”策略来质疑。

可以通过一个例子来理解:选择uid,从性别=1的用户中选择名称;

这个select查询首先根据where语句进行选择,而不是先查询所有的表,然后执行性别过滤。

在这个选择查询中,属性首先根据uid和名称进行投影,而不是在取出所有属性后进行过滤。

结合这两个查询条件,生成最终的查询结果。

此外,查询优化器还可以控制sql语句查询哪个索引,并自动调整sql语句中where条件的顺序,以满足复合索引最左侧匹配原则的规则。

缓存器:查询缓存。如果查询缓存中有命中查询结果,查询语句可以直接从查询缓存中获取数据。

LRU算法溢出了数据的冷端,将来会及时刷新到磁盘的数据页,称为脏页。

这种缓存机制由一系列小缓存组成。如表缓存、记录缓存、关键字缓存、权限缓存等。

不建议将缓存用于MySQL查询,因为在实际业务场景中,查询缓存失效可能非常频繁。如果更新表,表中的所有查询缓存都将被清空。

因此,我们通常不建议在大多数情况下使用查询缓存。

MySQL版本后,删除了缓存功能,官方认为这个功能在实际应用场景中并不多见,所以干脆删除了。

MySQL 8.0 版本后移除:说白了,存储引擎就是一种如何管理运营数据(存储数据、如何更新、查询数据等)的方法。).因为关系数据库中的数据是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作这个表的类型)。

>物理文件
物理文件包括:日志文件,数据文件,配置文件,pid文件,socket文件等

 

一个查询语句的执行流程

说了以上这么多,那么究竟一条 sql 语句是如何执行的呢?其实我们的 sql 可以分为两种,一种是查询,一种是更新(增加,更新,删除)。我们先分析下查询语句,语句如下:

select * from tb_student  A where A.age='18' and A.name=' 张三 ';

 

结合上面的说明,我们分析下这个语句的执行流程:
1、建立连接
2、调用sql接口
3、鉴权:先检查该语句是否有权限,如果没有权限,直接返回错误信息
4、缓存判断:如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。
5、解析sql语句:
通过分析器进行词法分析,提取 sql 语句的关键元素,比如提取上面这个语句是查询 select,提取需要查询的表名为 tb_student,需要查询所有的列,查询条件是这个表的 id=‘1’。然后判断这个 sql 语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。
6、查询优化对sql语句进行sql
接下来就是优化器进行确定执行方案,上面的 sql 语句,可以有两种执行方案:
 a. 先查询学生表中姓名为“张三”的学生,然后判断是否年龄是 18。
 b. 先找出学生中年龄 18 岁的学生,然后再查询姓名为“张三”的学生。
 那么优化器根据自己的优化算法进行选择执行效率最好的一个方案(优化器认为,有时候不一定最好)。确认了执行计划后就准备开始执行了。

7、执行查询,返回结果

 

物理文件说明

1、日志文件

怎样分析MySQL体系架构
 

 

error log     错误日志       排错          /var/log/mysqld.log【默认开启】
 
bin log       二进制日志    备份          增量备份 DDL DML DCL
 
Relay log   中继日志        复制            接收 replication master
 
slow log     慢查询日志     调优         查询时间超过指定值

日志文件的默认位置:
Error Log
log-error=/var/log/mysqld.log
Binary Log
log-bin=/var/log/mysql-bin/bin.log
server-id=2 5.7.x版本后
Slow Query Log
slow_query_log=1|0
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3

2、配置文件
/etc/my.cnf—>/etc/mysql/my.cnf—>/usr/etc/my.cnf—> ~/.my.cnf
如果冲突,以最后一个读取的为准
[mysqld]组中包括了mysqld服务启动时的初始化参数
[client]组中包含着客户端工具程序可以读取的参数,此外还有其他针对各个客户端软件的特定参数组等

3、数据文件
1、.frm文件
不论是什么存储引擎,每一个表都会有一个以表名命名的.frm文件,与表相关的元数据(meta)信息都存放在此文件中,包括表结构的定义信息等。
2、.MYD文件
myisam存储引擎专用,存放myisam表的数据(data)。每一个myisam表都会有一个.MYD文件与之呼应,同样存放在所属数据库的目录下
3、.MYI文件
也是myisam存储引擎专用,存放myisam表的索引相关信息。对于myisam存储引擎来说,可以被缓存(cache)的内容主要就是来源于.MYI文件中。
每一个myisam表对应一个.MYI文件,其存放的位置和.frm及.MYD一样
4、.ibd文件和ibdata文件
存放innoDB的数据文件(包括索引)。innoDB存储引擎有两种表空间方式:独享表空间和共享表空间。
独享表空间:使用.ibd文件来存放数据,且每个表一个.ibd文件,文件存放在和myisam数据相同的位置。
共享表空间:使用.ibdata文件,所有表共同使用一个(或多个,自行配置)ibdata文件。

ibdata1:系统表空间(数据文件)undo 段
ib_logfile0   redlog文件  一组
ib_logfile1

db.opt文件    此文件在每一个自建的库里都会有,记录这个库的默认使用的字符集和校验规。

4、pid文件
pid文件是mysqld应用程序在Unix/Linux环境下的一个进程文件,和许多其他Unix/Linux服务端程序一样,它存放着自己的进程id

5、socket文件
socket文件也是在Unix/Linux环境下才有的,用户在Unix/Linux环境下客户端连接可以不通过TCP/IP网络而直接使用Unix Socket来连接mysql.

 

数据库、数据库实例、数据库服务器

数据库(database):
操作系统或存储上的数据文件的集合。mysql数据库中,数据库文件可以是* .frm、.MYD、.MYI、*.ibd等结尾的文件,不同存储引擎文件类型不同。
更偏向文件的存储方面。
数据库实例(instance)
由后台进程或者线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。
需要注意:数据库实例才是真正操作数据库的。
更偏向应用操作方面。

数据库和数据库实例的关系:
通常情况下,数据库实例和数据库是一一对应的关系,也就是一个数据库实例对应一个数据库;
但是,在集群环境中存在多个数据库实例共同使用一个数据库。
比如一个数据库里面的表,经过分表策略,可以分散在多个数据库实例中。
数据库实例指的是数据库应用,数据库指的是在数据库实例上面创建的database。
比如在服务器上部署了一个3306端口的mysql应用,那么就是一个数据库实例;
如果继续部署一个3309的mysql应用,那么就是在一个服务上部署了2个msql的实例。
在3306端口的mysql实例上,创建一个名为order的database,就是创建了一个数据库。

数据库服务器(database server)
部署安装数据库实例的服务器。

 

总结

1、mysql体系结构,主要包括连接池组件、管理服务和工具组件
SQL接口组件、查询分析器组件、优化器组件、缓冲(Cache)组件、插件式存储引擎
物理文件。
2、分析一个查询语句的执行过程:建立连接—》权限校验—》查询缓存—》分析器—》优化器—》权限校验—》执行器—》引擎
3、区分数据库、数据库实例、数据库服务器

【开心一刻】

怎样分析MySQL体系架构    

关于怎样分析MySQL体系架构就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/47510.html

(0)

相关推荐

  • css和html的区别有哪些

    技术css和html的区别有哪些这篇文章主要介绍“css和html的区别有哪些”,在日常操作中,相信很多人在css和html的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css

    攻略 2021年11月9日
  • 如何理解微服务与DevOps

    技术如何理解微服务与DevOps本篇内容介绍了“如何理解微服务与DevOps”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成

    攻略 2021年10月19日
  • 美国企业云服务器中的关键功能

    技术美国企业云服务器中的关键功能并非每个美国云服务器都会为您的企业提供相同的功能集。在为您的企业选择完美的美国云服务器环境时,您需要注意某些能够帮助您获得最佳性能、可扩展性和安全性的功能。1. 稳固的服务器网络 美国云服

    礼包 2021年11月9日
  • 个人面试小总结之一

    技术个人面试小总结之一 个人面试小总结之一基础
    值传递和引用传递的区别
    值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,那么我们的实际参数不会改变
    引用传递:指在调

    礼包 2021年12月5日
  • JVM指令系统的组成及怎么用使用

    技术JVM指令系统的组成及怎么用使用JVM指令系统的组成及怎么用使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。介绍一下JVM指令系统 的概念和用法,JV

    攻略 2021年10月23日
  • 容斥问题公式,详细解释一下3个以上的容斥定理

    技术容斥问题公式,详细解释一下3个以上的容斥定理这是摩根公式 和 容斥定理 (A交B)的补==(A的补)并(B的补)
    (A并B)的补==(A的补)交(B的补)
    补==取补集
    并==取并集
    交==取交集

    生活 2021年10月26日