WiredTiger儲存引擎

2021-10-01 16:47:49 字數 3003 閱讀 9695

儲存引擎是資料庫的一部分,負責管理如何在記憶體和磁碟上儲存資料。許多資料庫支援多個儲存引擎,其中不同的引擎對特定工作負載的效能會更好。例如,乙個儲存引擎可能為讀取繁重的工作負載提供更好的效能,另乙個可能支援更高的寫入操作吞吐量。

也可以看看 儲存引擎

可以。您可以擁有使用不同儲存引擎的副本集成員。

注意

mongodb 4.0不推薦使用mmapv1儲存引擎。

在設計這些多儲存引擎部署時,請考慮以下事項:

每個成員上的oplog可能需要設定不同的大小來負責不同儲存引擎之間的吞吐量差異。

如果備份是以從mongodb快照資料檔案的方式,那麼備份恢復可能會變得更加複雜:您可能需要維護每個儲存引擎的備份。

可以。參考:

將單機部署的儲存引擎更改為wiredtiger

將副本集的儲存引擎更改為wiredtiger

將分片集群的儲存引擎更改為wiredtiger

使用wiredtiger,mongodb同時使用wiredtiger內部快取和檔案系統快取。

從mongodb 3.4開始,預設的wiredtiger內部快取大小是以下兩者中的較大者:

- 50%(記憶體大小 – 1 gb),或

- 256 mb。

例如,在總共4gb 記憶體的系統上,wiredtiger快取將使用1.5gb的記憶體(0.5* (4 gb – 1 gb) = 1.5 gb)。相反,具有總共1.25 gb 記憶體的系統將為wiredtiger快取分配256 mb,因為這超過總記憶體的一半減去1gb位元組(0.5 *(1.25 gb – 1 gb) = 128 mb < 256 mb)。

wiredtiger內部快取中的資料與磁碟上的資料使用不同表示形式的資料格式:

通過檔案系統快取,mongodb自動使用wiredtiger快取或其他程序未使用的所有可用記憶體。

要調整wiredtiger內部快取的大小,請參閱 storage.wiredtiger.engineconfig.cachesizegb和 –wiredtigercachesizegb。應當避免將wiredtiger內部快取大小增加到其預設值以上。

注意storage.wiredtiger.engineconfig.cachesizegb限制wiredtiger內部快取的大小。作業系統將使用可用的空閒記憶體用於檔案系統快取,這允許壓縮的mongodb資料檔案保留在記憶體中。此外,作業系統將使用任何空閒記憶體來緩衝檔案系統塊和檔案系統快取。

為了容納其他的記憶體消費者,您可能必須減少wiredtiger內部快取大小。

預設的wiredtiger內部快取大小值假定每台計算機只有乙個mongod例項。如果單個計算機包含多個mongodb例項,則應減少該設定以適應其他mongod 例項。

如果您的mongod是執行在無法訪問系統中所有可用記憶體 的容器(例如lxc, cgroups,docker等)中時,則必須將storage.wiredtiger.engineconfig.cachesizegb設定為小於容器中可用記憶體大小的值。確切的大小取決於容器中執行的其他程序。

要檢視有關快取和快取淘汰率的統計資訊,請參閱從serverstatus命令返回的 wiredtiger.cache欄位。

checkpoints(檢查點)

從版本3.6開始,mongodb配置wiredtiger以60秒的間隔建立checkpoints(即將快照資料寫入磁碟)。在早期版本中,mongodb在wiredtiger中以60秒的間隔設定檢查點,或者在寫入2 gb的預寫日誌(journal)資料時,以先發生者為準。

journal data(預寫日誌資料)

如何在wiredtiger中**磁碟空間?

wiredtiger儲存引擎在刪除文件時維護資料檔案中的空記錄列表。此空間可以由wiredtiger重用,但除非在非常特定的情況下,否則不會返回到作業系統。

可供wiredtiger重用的空白空間量反映在db.collection.stats()輸出的wiredtiger.block-manager.file欄位中(單位為位元組)

要允許wiredtiger儲存引擎將此空白空間釋放到作業系統,您可以對資料檔案進行碎片整理。這可以使用compact命令來實現。有關其行為和其他注意事項的更多資訊,請參閱compact。

要檢視集合的統計資訊(包括資料大小),請使用mongo shell中的db.collection.stats()方法。以下示例為orders集合執行db.collection.stats():

複製db.orders.stats ();

mongodb還提供以下方法來返回集合的特定大小資訊:

- db.collection.datasize() 返回集合的未壓縮資料大小(以位元組為單位)。

- db.collection.storagesize()返回磁碟儲存上集合的位元組大小。如果集合資料被壓縮(wiredtiger預設配置會壓縮),則儲存大小反映壓縮大小,並且可能小於db.collection.datasize()返回的值 。

- db.collection.totalindexsize()返回集合的索引大小(以位元組為單位)。如果索引使用字首壓縮(wiredtiger預設配置會對索引字首壓縮),則返回的大小反映壓縮的大小。

以下指令碼列印每個資料庫的統計資訊:

db.admincommand("listdatabases").databases.foreach(function (d) )

以下指令碼列印每個資料庫中每個集合的統計資訊:

db.admincommand("listdatabases").databases.foreach(function (d) )})

要檢視為每個索引分配的資料大小,請使用 db.collection.stats()方法並檢查返回文件中的 indexsizes欄位。

如果索引使用字首壓縮(wiredtiger預設配置會對索引字首壓縮),則該索引的返回大小反映壓縮大小。

mongo shell中的db.stats()方法返回「活躍」資料庫的當前狀態。有關返回欄位的說明,請參見 dbstats輸出。

Mongo 儲存引擎 WiredTiger概覽

wiredtiger的寫操作會先寫入cache,並持久化到wal write ahead log 每60s或log檔案達到2gb時會做一次checkpoint,將當前的資料持久化,產生乙個新的快照。wiredtiger的cache採用btree的方式組織,每個btree節點為乙個page,root ...

儲存引擎Wiredtiger原理剖析

今天開始看mongodb 3.2的文件,發現了這麼兩句話 support for multiple storage engines mongodb supports multiple storage engines,such as wiredtiger storage engine and mmap...

WiredTiger 原理知識

一 mongodb寫入操作流程 1 wiredtiger寫操作先到cache,並持久化wal 2 每60s或log檔案達到2g,則執行一次checkpoint持久化,產生乙個新快照。3 wiredtiger連線初始化時,先將資料恢復到最新的快照,再根據wal恢復資料。二 cache cache採用b...