MySQL体系架构

Posted zxy860320

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL体系架构相关的知识,希望对你有一定的参考价值。

mysql体系结构如下图:

技术分享图片

 

1.MySQL体系分为两部分:

1.1.MySQL server层

权限判断:判断用户是否有权限访问某库某表的或者表里面某行。

查询缓存:通过query cache进行操作,如果在query cache中则直接返回结果给客户端。线上环境最好把query cache关闭掉将query_cache_size及query_cache_type设置为0即可。5.6之后的MySQL默认是关闭的

解析器:对SQL语句进行解析,判断SQL语句的语法是否正确。

预处理器:解析器无法处理的语义在这里进行处理

优化器:对SQL语句进行改写和相应的优化,并产生执行计划

1.2.存储引擎层

MySQL本身支持的存储引擎还是比较多的,但是目前大多数人用到的还是Innodb和MyISAM,其中MyISAM在MySQL 8.0以后将不在支持。默认的引擎是innodb.

 

2.innodb体系架构

MySQL体系结构中的存储引擎层主要了解innodb,因为它也是目前比较常用的一个存储引擎。

innodb包括三部分内存、进程、磁盘文件

innodb体系结构如下图所示:

技术分享图片

2.1.innodb内存结构

innodb的内存结构可以分为SGA(系统全局区)和PGA(程序缓存区)

SGA:

innodb_buffer_pool:用来缓存数据、索引、插入缓冲、数据字典

innodb_log_buffer:事务在内存中的缓冲,即redo log buffer的大小

innodb_addition_mem_pool_size:保存字典信息及其他数据结构的内存池

PGA:

sort_buffer_size:SQL语句在内存中的临时排序

join_buffer_size:表连接使用,用于BKA

read_buffer_size:表顺序扫描的缓存,只能应用于MyISAM表存储引擎

read_rnd_buffer_size:MySQL随机读缓冲区大小,用于做mrr

tmp_table_size:SQL语句在排序或者分组时没有用到索引,就会使用临时表空间

max_heap_table_size:管理heap、memory存储引擎表

2.2innodb的进程

master thread:四个循环,主循环、后台循环、刷新循环、暂停循环,其中主循环分为两种状态1秒和10秒

1s:

刷新日志到磁盘

刷新脏数据到磁盘

执行合并插入缓冲操作

产生checkpoint

删除无用的table cache

如果当前没有用户转入后台循环

10s:

刷新日志到磁盘

刷新脏数据到磁盘

执行合并插入缓冲操作

产生checkpoint

清除无用的undo 页

 

IO_thread:

默认MySQL应该是开启了10个IO_thread,其中4个read_thread,4个write_thread,1个redo_log thread 1个insert buffer thread

redo log buffer负责将日子缓冲中的内容刷新到redo log文件中,insert buffer thread,将插入缓冲中的内容刷新到磁盘,read/write thread是数据度的读写请求线程。

page clean thread:

负责将脏数据刷新到磁盘的线程

purge thread

 负责删除无用undo页

 

以上是关于MySQL体系架构的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 体系架构简介

MySQL 体系架构简介

MySQL体系架构

MySQL体系-MySQL架构

MySQL的架构体系

Mysql逻辑体系架构