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
相關文章
- 儲存引擎儲存引擎
- MySQL 儲存引擎MySql儲存引擎
- bitcask儲存引擎儲存引擎
- MySQL儲存引擎MySql儲存引擎
- openGauss儲存技術(一)——行儲存引擎儲存引擎
- MySQL系列-儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎
- 儲存引擎簡介儲存引擎
- SQL----儲存引擎SQL儲存引擎
- openGauss儲存技術(二)——列儲存引擎和記憶體引擎儲存引擎記憶體
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- MySQL-05.儲存引擎MySql儲存引擎
- InnoDB儲存引擎簡介儲存引擎
- MySQL入門--儲存引擎MySql儲存引擎
- 理解mysql的儲存引擎MySql儲存引擎
- OceanBase 儲存引擎詳解儲存引擎
- MySQL之四 儲存引擎MySql儲存引擎
- InnoDB儲存引擎鎖機制(三、鎖的演算法)儲存引擎演算法
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- openGauss In-place-Update儲存引擎儲存引擎
- 14.1 InnoDB 儲存引擎介紹儲存引擎
- 2_mysql(索引、儲存引擎)MySql索引儲存引擎
- MySQL federated儲存引擎測試MySql儲存引擎
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- PostgreSQL儲存引擎之page結構SQL儲存引擎
- MongoDB技術分享:WiredTiger儲存引擎MongoDB儲存引擎
- LSM儲存引擎基本原理儲存引擎
- 如何選擇mysql的儲存引擎MySql儲存引擎
- 小談mysql儲存引擎優化MySql儲存引擎優化
- [轉帖]OceanBase 儲存引擎詳解儲存引擎
- MySQL儲存引擎入門介紹MySql儲存引擎
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- MySQL索引、事務與儲存引擎MySql索引儲存引擎
- 簡單認識MySQL儲存引擎MySql儲存引擎
- 第二章 InnoDB儲存引擎儲存引擎
- 聊一聊MySQL的儲存引擎MySql儲存引擎
- TDengine 的儲存引擎升級之路儲存引擎