跟其他關系型資料庫一樣,MySQL的架構也分為In-Memory 和On-Disk兩部分。
申請阿裡雲服務時,可以使用
2000元阿裡雲代金券,阿裡雲官網領取網址:
https://dashi.aliyun.com/site/yun/youhui
,阿裡雲官活動網址:
https://dashi.aliyun.com/site/yun/aliyun可以用20代金券,即102-20=82。
在記憶體結構中,主要由4大塊組成。
Buffer Pool(以下簡稱bp)
bp在整個記憶體中占絕大多數,MySQL官方一般建議設定為伺服器實體記憶體的80%。這邊建議MySQL整體記憶體控制在80%左右,bp最好不要超過70%,不然容易OOM。
了解了bp的原理,對于資料庫也有差不多了解了一半了。bp主要結構是個list,用的是LRU算法的變種(least recently used)。
主要用來緩存資料塊(page,也叫頁),mysql預設為16k,oracle為8k。如果記憶體達到了門檻值,那麼就會把最近最少使用到的page驅逐(evicted)出記憶體。然後把新頁插入到中間位置,一般為整條list的熱端5/8處。
檢視下圖可以看到,整個bp分為兩個sublist,上端為熱端,緩存熱點資料(頻繁被通路);另外一端為冷端,随時被驅逐出記憶體。
也正是因為磁盤通路資料不如記憶體,才有了bp的存在,大家也可以想象一下,如果磁盤資料比記憶體快,還有bp存在的價值嗎?
所有使用者通路的資料,都要先經過bp,但如果走全表掃描,按道理也有把資料緩存在bp中,那麼勢必會把大量資料驅逐出去,當然我們也可以通過調整參數來優化,這個我們在這篇知識普及文檔中暫不提及。
Change Buffer
Adaptive Hash Index
Redo Log Buffer