MySQL体系结构与参数文件及查询优化器详解

1. MySQL 体系结构

如下图:

MySQL体系结构与参数文件及查询优化器详解

MySQL是由SQL接口,解析器,优化器,缓存,存储引擎组成的(SQL Interface、 Parser、 Optimizer、Caches&Buffers、Pluggable Storage Engines)

Connectors指的是不同语言中与SQL的交互

Management Serveices & Utilities: 系统管理和控制工具,例如备份恢复、Mysql复制、集群等

Connection Pool: 连接池:管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要

SQL Interface: SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

Parser: 解析器, SQL命令传递到解析器的时候会被解析器验证和解析。主要功能: 
a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的 
b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

Optimizer: 查询优化器, SQL语句在查询之前会使用查询优化器对查询进行优化

Cache和Buffer(高速缓存区): 查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。 
通过LRU算法将数据的冷端溢出,未来得及时刷新到磁盘的数据页,叫脏页。 
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存, key缓存,权限缓存等

Engine :存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。

MySQL相关底层文件

2. MySQL 文件

构成MySQL整个数据库的是所有的相关文件,这些文件有: 
参数文件my.cnf:告诉MySQL实例在启动的时候去哪里找数据库文件,并指定初始化文件参数,包括定义内存缓冲池大小等等

日志文件:用来记录MySQL实例对某些条件作出响应时写入的文件,包括错误日志文件,二进制日志文件,慢查询日志文件,查询日志文件等

Socket文件:当用Unix套接字方式连接时使用的文件

Pid文件:MySQL实例的进程ID文件

MySQL表结构文件:用来存放表结构定义的文件

存储引擎相关文件:每个存储引擎都有自己相关的文件来保存各种数据,包括表数据和索引数据等等

参数文件:当MySQL实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定的初始化参数

2.1 MySQL 参数文件

数据库参数其实是一个键值对(key/value),比如innodb_buffer_pool_size=1G。 
可以通过show variables命令来查看所有的参数,也可以通过like关键词来过滤特定的 
参数,还可以通过performance_schema.global_variables视图(5.7.6版本以后)来查看参数 

show variables like '%innodb_buffer_pool%'
select * from performance_schema.global_variables where
variable_name='innodb_buffer_pool_size';

  

MySQL体系结构与参数文件及查询优化器详解

MySQL数据库中的参数可以分为动态参数和静态参数两种 

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html #官方文档, 对一些参数的详细解释 

2.1.1 动态参数

参数的详细解释 
动态参数是指在数据库运行的过程中可以动态修改的参数,可以通过set命令对动态参数进行修改

用法:

mysql> help set
Name: 'SET'
Description:
Syntax:
SET variable_assignment [, variable_assignment] ...
 
variable_assignment:
      user_var_name = expr
    | param_name = expr
    | local_var_name = expr
    | [GLOBAL | SESSION]
        system_var_name = expr
    | [@@global. | @@session. | @@]
        system_var_name = expr

  

Global和session是指该参数的修改是基于当前会话还是基于整个实例的生命周期 
设置为global参数修改,并不影响my.cnf中的变化,当数据库下次重启依然是参数文件中的配置

注: 如果不重启mysql 的情况下动态修改参数,先看看该参数是不是动态参数, 如果是动态参数 则可以用set global 方式修改 , 修改完动态参数文文件,再加入到my.cnf 
例如autocommit 是dynamic 动态参数
 

MySQL体系结构与参数文件及查询优化器详解

2.1.2 静态参数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b0c2f98b28341b5ab270e2668fc9c4d8.html