MySQL 架构

最近在准备给新人培训,对于DBA相关的新人,最推荐的莫过于学习官方文档,像Oracle的concept,MySQL的reference等,MySQL被Oracle收购以后,文档也越来越完整和形象,对于刚学习的新人,学习官方文档有助于跟为系统得学习。

本篇主要讲MySQL8.0InnoDB的架构

跟其他关系型数据库一样,MySQLW 2 w z r % 5 U C架构也分为In-Memory 和On-Disk两部分。
MySQL 架构

内存结构中,主要由4大块组成。

Buffer Pool(以下简称bp)

bp在整个内存V W m $ % ax & O ~ A 5占绝大多数,MySQL官方一般建议设置为服务器物理内存的80%。这边建议MySQL整体内存控制在80%左右,bp最好不要超过70%,2 F b 1不然容易OOM。
理解了bp的原理,对于数据库也有差不多理解了一半了。bp主要结构是个list0 q y d v ;用的是LRU算法的变种(least recently used)。
主要用来缓存数据块(pag3 0 ( K 2 4 j L @e,也叫页),mysql默认为16k,oracl_ & T ? b o C 0e为8k。如果内存达到了阈值,那么就会把最近最少使用d a u * -到的page驱逐(evicted)出内存。然后把新页插入到中n _ { ? O间位置,一般为整条list的热端5/8处。
查看下图可以看到,整个bp分为两个sublist,C u 2 v & 5 }上端为热端,缓存热点数据(频繁被访问);[ ? s M . ] G另外一端为冷端,随时被驱逐出内d B X y ;存。
也正是因为磁盘访问数据不如a . T . w y 9 1 Y内存,才有了bp的存在,大家也可以想象一下,如果磁盘数据比内存快,还有bp存在的价值吗?
所有用户访问的数据,都要先N 5 w * L d Z经过bp,但如果走全表扫描,按道理也有把数据缓存在bp中,那么势必会把大量数据驱逐出去,当然我们也可以通过调整参数来t x 5 R C - j r C优化,这个我们在这篇知识普及文档中暂不提及。
MySQL 架构

Change Buffer

Adaptive Hash Index

Redo Log Buffer