第二章 InnoDB體系架構(一)

2021-07-13 23:54:12 字數 2409 閱讀 2332

體系架構:

後台執行緒 ——> 記憶體池 檔案

後台執行緒負責重新整理記憶體池,記憶體池負責維護所有程序/執行緒需要的資料內部結構,快取磁碟上的資料,重做日誌緩衝。

一、後台執行緒

1、master thread:核心後台執行緒,負責將快取池中的資料非同步重新整理到磁碟,保證資料的一致性。

2、i/o thread

命令列:show engine innodb status;

4個i/o thread: thread 0 為insert buffer thread,thread 1 為log thread。然後是read thread 和write thread 各四個,讀執行緒的id總是小於寫執行緒。可以用innodb_read_io_threads 和 innodb_write_io_threads引數設定 io thread 數量。

3、purge thread: **已經使用並分配的undo頁。啟動時innodb_purge_threads=1。支援多個innodb_purge_threads,進一步加快undo頁的**。

4、page cleaner thread: 對之前版本的髒頁進行重新整理操作。

二、記憶體池

1、緩衝池:

innodb是基於磁碟儲存的,並將其中的記錄按頁管理,緩衝池是一塊記憶體,為了解決cpu速度和磁碟速度不匹配。

資料庫讀取頁時,首先將從磁碟讀到的頁放在緩衝池,稱為「fix」,下一次再讀相同的頁,首先判斷該頁是否在緩衝池中,若在則在緩衝池中命中,直接讀取,否則讀取磁碟上的。

對資料庫中的頁修改時,先修改緩衝池中的頁,然後再以一定頻率重新整理到磁碟上。不是頁每次更改就重新整理回磁碟,是通過checkpoint機制重新整理回磁碟。

配置緩衝池的大小:引數innodb_buffer_pool_size;

配置緩衝池例項個數:引數 innodb_buffer_pool_instances;

緩衝池快取的資料頁型別:索引頁、資料頁、undo頁、插入緩衝、自適應雜湊索引、鎖資訊,資料字典資訊。

2、重做日誌緩衝

innodb將重做日誌資訊放入這個緩衝區,然後按一定頻率將其重新整理到重做日誌檔案,緩衝大小預設為8mb,可以通過引數innodb_log_buffer_size控制。

一下三種情況會將重做日誌緩衝重新整理到重做日誌檔案:

master thread 每秒重新整理;

提交事務時;

重做日誌緩衝池剩餘空間小於1/2時。

3、額外的記憶體池

對記憶體的管理通過記憶體堆,對一些資料結構本身的記憶體進行分配時,需要從額外的記憶體池申請,當該區域不夠時,從緩衝池中申請。

三、innodb對緩衝池的管理

innodb使用優化的lru演算法(最近最久未使用演算法):lru列表中加入了midpoint位置,新讀取的頁放入列表的midpoint位置,預設配置下,該位置在列表長度的5/8處,可通過引數innodb_old_blocks_pct配置。midpoint之後的列表稱為old列表,之前的列表稱為new列表,new列表中的頁都是最為活躍的熱點資料。

每頁的大小為16k,可以壓縮頁,對於非16k的頁,是通過unzip_lru列表管理的。 

lru列表中的頁修改後,則稱為髒頁,即緩衝池中的頁和磁碟上資料不一致,通過checkpoint機制寫回磁碟。髒頁列表既存在於lru,也存在flush列表中,lru列表用來管理緩衝池中頁的可用性,flush列表管理將頁重新整理回磁碟,互不影響。

四、checkpoint機制

事務資料庫採取write ahead log策略:事務提交時,先寫重做日誌,再修改頁。當宕機發生資料丟失時,通過重做日誌檔案完成資料恢復。

checkpoint解決;

2、緩衝池不夠用時,重新整理髒頁:緩衝池不夠用時,lru 會溢位最近最少未使用的頁,若這個頁是髒頁,則強制checkpoint,將髒頁重新整理回磁碟。

3、重做日誌不可用時,重新整理髒頁:重做日誌是迴圈使用的,重做日誌可被重用的部分是指這些重做日誌已經不再需要,若此時重做日誌還需要使用,則強制checkpoint,將緩衝池中的頁至少重新整理到當前重做日誌的位置。

兩種checkpoint:

1、sharp checkpoint:預設的工作方式,資料庫關閉時將所有的髒頁重新整理到磁碟。

2、fuzzy checkpoint:資料庫執行時,只重新整理一部分髒頁。以下情況:

master thread checkpoint : master thread按一定的頻率重新整理一定比例的髒頁到磁碟。

flush_lru_list checkpoint: lru空間不夠時,從尾端溢位,若有髒頁,則checkpoint.

async/sync flush checkpoint: 重做日誌檔案不可用時,強制。

dirty page too much checkpoint: 髒頁數量太多,強制重新整理一部分。

InnoDB體系架構總結(一)

緩衝池 是一塊記憶體區域,通過記憶體的速度來彌補磁碟速度較慢對資料庫效能的影響。在資料庫中讀取的頁資料會存放到緩衝池中,下次再讀取相同頁的時候,會首先判斷 該頁是否在緩衝池中。對於資料庫中頁的修改操作,會首先修改在緩衝池中的頁,然後再以一定的頻率重新整理到磁碟上。緩衝池中快取的資料頁有 索引頁,資料...

第二章高層體系結構筆記

2.1引言 hla按照物件導向的思想和方法來構建 系統。它是在物件導向分析與設計的基礎上劃分 成員,構造 聯邦的技術。聯邦是指用於達到某一特定 目的的分布 系統,它由若干個相互作用的聯邦成員構成。所有參與聯邦執行的應用程式都可以成為聯邦成員。聯邦中的成員可以用多種型別,其中最典型的一種聯邦成員是 應...

第二章 PostgreSQL程序和記憶體體系結構

悄悄放一張 postgresql運維技術 本章總結了postgresql的程序架構和記憶體架構。postgresql是乙個客戶端 伺服器型別的關聯式資料庫管理系統,具有多程序架構,執行在單個主機上。多個程序協同管理乙個資料庫集群通常被稱為 postgresql server 它包含以下型別的程序 b...