MongoDB--三、儲存引擎
名詞解析:
page:作業系統頁面檔案,磁碟資料組成單位
checkpoint:
3.1、mongoDB儲存引擎檢視
mongoDB3.2版本之後選擇了wiredTiger作為預設儲存引擎(不是inMemory引擎),檢視資料庫儲存引擎語句如下:
db.serverStatus()
3.2、儲存引擎解析
官網:http://source.wiredtiger.com/2.0.1/
wiredTiger通過Btree管理資料,B樹的資料結構如下圖。
按4照Mongodb預設的配置,WiredTiger的寫操作會先寫入Cache,並持久化到WAL(Write ahead log),每60s或log檔案達到2GB時會做一次Checkpoint,將當前的資料持久化,產生一個新的快照。Wiredtiger連線初始化時,首先將資料恢復至最新的快照狀態,然後根據WAL恢復資料,以保證儲存可靠性。
(1)Wiredtiger的Cache採用Btree的方式組織,每個Btree節點為一個page,root page是btree的根節點,internal page是btree的中間索引節點,leaf page是真正儲存資料的葉子節點;btree的資料以page為單位按需從磁碟載入或寫入磁碟。
(2)Wiredtiger採用Copy on write的方式管理修改操作(insert、update、delete),修改操作會先快取在cache裡,持久化時,修改操作不會在原來的leaf page上進行,而是寫入新分配的page,每次checkpoint都會產生一個新的root page。
(3)Checkpoint時,wiredtiger需要將btree修改過的PAGE都進行持久化儲存,每個btree對應磁碟上一個物理檔案,btree的每個PAGE以檔案裡的extent形式(由檔案offset + size標識)儲存,一個Checkpoit包含如下後設資料:
-
root page地址,地址由檔案offset,size及內容的checksum組成
-
alloc extent list地址,儲存從上次checkpoint起新分配的extent列表
-
discard extent list地址,儲存從上次checkpoint起丟棄的extent列表
-
available extent list地址,儲存可分配的extent列表,只有最新的checkpoint包含該列表
-
file size 如需恢復到該checkpoint的狀態,將檔案truncate到file size即可
(4) Mongodb裡一個典型的Wiredtiger資料庫儲存佈局大致如下:
$tree
.
├── journal
│ ├── WiredTigerLog.0000000003
│ └── WiredTigerPreplog.0000000001
├── WiredTiger
├── WiredTiger.basecfg
├── WiredTiger.lock
├── WiredTiger.turtle
├── admin
│ ├── table1.wt
│ └── table2.wt
├── local
│ ├── table1.wt
│ └── table2.wt
└── WiredTiger.wt
- WiredTiger.basecfg儲存基本配置資訊
- WiredTiger.lock用於防止多個程式連線同一個Wiredtiger資料庫
- table*.wt儲存各個tale(資料庫中的表)的資料
- WiredTiger.wt是特殊的table,用於儲存所有其他table的後設資料資訊
- WiredTiger.turtle儲存WiredTiger.wt的後設資料資訊
- journal儲存Write ahead log
一次Checkpoint的大致流程如下
對所有的table進行一次Checkpoint,每個table的Checkpoint的後設資料更新至WiredTiger.wt
對WiredTiger.wt進行Checkpoint,將該table Checkpoint的後設資料更新至臨時檔案WiredTiger.turtle.set
將WiredTiger.turtle.set重新命名為WiredTiger.turtle
上述過程如中間失敗,Wiredtiger在下次連線初始化時,首先將資料恢復至最新的快照狀態,然後根據WAL恢復資料,以保證儲存可靠性。
3.3、記憶體調整
官網1:https://docs.mongodb.com/v4.2/reference/configuration-options/#storage.wiredTiger.engineConfig.cacheSizeGB
官網2:https://docs.atlas.mongodb.com/sizing-tier-selection/
WiredTiger資料引擎記憶體快取限制,推薦大於8(GB)
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 8
官網:https://docs.mongodb.com/v4.2/reference/parameters/#param.maxIndexBuildMemoryUsageMegabytes
索引記憶體限制,推薦大於300(MB)
setParameter:
maxIndexBuildMemoryUsageMegabytes: 300
相關文章
- MyISAM 儲存引擎,Innodb 儲存引擎儲存引擎
- 儲存引擎儲存引擎
- bitcask儲存引擎儲存引擎
- MySQL 儲存引擎MySql儲存引擎
- Innodb儲存引擎儲存引擎
- MySQL儲存引擎MySql儲存引擎
- MySQL系列-儲存引擎MySql儲存引擎
- 儲存引擎簡介儲存引擎
- MySQL Archive儲存引擎MySqlHive儲存引擎
- InnoDB儲存引擎——表儲存引擎
- MySql 官方儲存引擎MySql儲存引擎
- MERGE 儲存引擎儲存引擎
- MySQL MEMORY儲存引擎MySql儲存引擎
- SQL----儲存引擎SQL儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- openGauss儲存技術(一)——行儲存引擎儲存引擎
- openGauss儲存技術(二)——列儲存引擎和記憶體引擎儲存引擎記憶體
- InnoDB儲存引擎簡介儲存引擎
- MySQL入門--儲存引擎MySql儲存引擎
- 理解mysql的儲存引擎MySql儲存引擎
- MySQL之四 儲存引擎MySql儲存引擎
- InnoDB儲存引擎檔案儲存引擎
- (5)mysql 常用儲存引擎MySql儲存引擎
- MySQL-05.儲存引擎MySql儲存引擎
- InnoDB儲存引擎鎖機制(三、鎖的演算法)儲存引擎演算法
- Mysql技術內幕InnoDB儲存引擎讀書筆記--《二》InnoDB儲存引擎MySql儲存引擎筆記
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- 2_mysql(索引、儲存引擎)MySql索引儲存引擎
- MySQL federated儲存引擎測試MySql儲存引擎
- OceanBase 儲存引擎詳解儲存引擎
- InnoDB儲存引擎——兩次寫儲存引擎
- InnoDB儲存引擎——記憶體儲存引擎記憶體
- InnoDB儲存引擎——Checkpoint技術儲存引擎
- InnoDB儲存引擎——插入緩衝儲存引擎
- InnoDB儲存引擎——非同步IO儲存引擎非同步
- MySql 擴充套件儲存引擎MySql套件儲存引擎
- MySQL 5.5儲存引擎介紹MySql儲存引擎