rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager
本文翻譯自 RocksDB 官方 Wiki《Write Buffer Manager》:
https://github.com/facebook/rocksdb/wiki/Write-Buffer-Manager
翻譯者:fanrui
Write buffer manager 幫助用戶控制多個(gè) column family 和 DB 實(shí)例的 MemTable 內(nèi)存消耗。通過 Write Buffer Manager,用戶可以實(shí)現(xiàn):
Write buffer manager 的使用與 rate_limiter 和 sst_file_manager 類似。用戶可以創(chuàng)建一個(gè) write buffer manager 對(duì)象,并將其傳遞給你希望由該對(duì)象控制 MemTable 大小的 Column Family 或 DB 選項(xiàng)。看?write_buffer_manager.h?的代碼注釋可以看到如何使用。
限制 MemTable 的總內(nèi)存
創(chuàng)建 write buffer manager 對(duì)象時(shí)可以給出內(nèi)存限制。RocksDB 將會(huì)盡量控制總的使用內(nèi)存在限制以下。
在 5.6 及其之后的版本,如果可變的 MemTable 的總大小超過了內(nèi)存限制的 90%,那么 RocksDB 的相應(yīng) Column Family 就會(huì)觸發(fā) flush。如果實(shí)際的內(nèi)存使用超過了限制,即使可變的 MemTable 使用的內(nèi)存低于 90%,也會(huì)非常積極地觸發(fā) flush。在 5.6 版本之前,如果可變的 MemTable 大小超過了限制,則會(huì)觸發(fā) flush。
在 5.6 及其之后的版本,所有被 write buffer manager 管理的內(nèi)存都會(huì)被計(jì)算在內(nèi),不僅僅是 MemTable 的內(nèi)存使用。5.6 之前的版本,內(nèi)存的計(jì)算僅僅按照 MemTable 的實(shí)際使用來計(jì)算的。
MemTable 使用 Block Cache 的內(nèi)存
從 5.6 版本之后,用戶可以配置 MemTable 使用 Block Cache 的內(nèi)存。這個(gè)配置不管是否開啟了 MemTable 內(nèi)存的限制。
大多數(shù)情況,Block Cache 中 MemTable 相比 data block 僅僅占比較小的比例。所以當(dāng)用戶開啟這個(gè)功能,Block Cache 的容量將會(huì)包含所有 Block Cache 和 MemTable 的內(nèi)存使用。如果用戶啟用?cache_index_and_filter_blocks,那么 RocksDB 中三個(gè)主要的內(nèi)存使用都會(huì)被單個(gè)上限進(jìn)行限制。
下面是實(shí)現(xiàn)原理:每次分配給 MemTable 1MB 的內(nèi)存,WriteBufferManager 將會(huì)放 1MB 的虛擬項(xiàng)到 Block Cache 中,這樣 Block Cache 就可以知道實(shí)際的使用大小,從而淘汰 Block 來獲取內(nèi)存空間。對(duì)于 MemTable 內(nèi)存使用減少的情況,WriteBufferManager 并不會(huì)立即刪除這些虛擬項(xiàng),而是在內(nèi)存使用量顯著降低時(shí)再緩慢地刪除這些虛擬項(xiàng)。這是因?yàn)?MemTable 的內(nèi)存總是在自然地上下浮動(dòng),因此我們嘗試減少對(duì) Block Cache 的干擾。
通過以下方式開啟這個(gè)功能:
- 將 Block Cache 傳遞給即將使用的 WriteBufferManager
- 將 MemTable 期望使用的最大內(nèi)存?zhèn)鬟f給 WriteBufferManager
- 設(shè)置 Block Cache 的容量為 data block 緩存和 MemTable 的總大小
總結(jié)
以上是生活随笔為你收集整理的rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下的工具链 树莓派_7.
- 下一篇: integer加1_AP双语数学常用的术