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体系架构的主要内容,如果未能解决你的问题,请参考以下文章