MySQL系统架构

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

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

跟其他关系型数据库一样,MySQL的架构也分为In-Memory 和On-Disk两部分。

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

Buffer PoW F 5 * s ^ H e &ol(以下简称bp)

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

Change Buffer

Adaptive Hash Index

Redo Log Buffer