[Mysql] MySQL8.0InnoDB的架构 看全部

跟其他关系型数据库一样,MySQL的架构也分为In-Memory 和On-Disk两部分。
申请阿里云服务时,可以使用2000元阿里云代金券,阿里云官网领取网址:https://dashi.aliyun.com/site/yun/youhui: C* ~/ o3 T7 c1 K  g, S( x1 C& m* ?, \

& G, L# A, u9 ~                               
登录/注册后可看大图
阿里云服务器1核2G低至82元/年,阿里云官活动网址:https://dashi.aliyun.com/site/yun/aliyun 可以用20代金券,即102-20=82。
在内存结构中,主要由4大块组成。
Buffer Pool(以下简称bp)
bp在整个内存中占绝大多数,MySQL官方一般建议设置为服务器物理内存的80%。这边建议MySQL整体内存控制在80%左右,bp最好不要超过70%,不然容易OOM。( v4 O4 ^5 \, a9 z) I: ^
理解了bp的原理,对于数据库也有差不多理解了一半了。bp主要结构是个list,用的是LRU算法的变种(least recently used)。
0 |; r2 h4 V( \) s# e主要用来缓存数据块(page,也叫页),mysql默认为16k,oracle为8k。如果内存达到了阈值,那么就会把最近最少使用到的page驱逐(evicted)出内存。然后把新页插入到中间位置,一般为整条list的热端5/8处。
. l6 K+ p9 ~/ I1 E9 F; P8 G8 A查看下图可以看到,整个bp分为两个sublist,上端为热端,缓存热点数据(频繁被访问);另外一端为冷端,随时被驱逐出内存。
7 o5 ?/ n: W$ y) d也正是因为磁盘访问数据不如内存,才有了bp的存在,大家也可以想象一下,如果磁盘数据比内存快,还有bp存在的价值吗?
) f+ R3 F/ R1 Y1 a4 [+ W3 B: M; s9 a所有用户访问的数据,都要先经过bp,但如果走全表扫描,按道理也有把数据缓存在bp中,那么势必会把大量数据驱逐出去,当然我们也可以通过调整参数来优化,这个我们在这篇知识普及文档中暂不提及。
! U  Y% y) A" V; u
# O' L" o/ z0 ~9 H
                               
登录/注册后可看大图
Change BufferAdaptive Hash IndexRedo Log Buffer
" R4 M7 c' `* A4 s2 k3 B! j- U% m1 f