rocksdb對Write Stalls的調優

2021-08-10 19:57:47 字數 1101 閱讀 5719

當我們持續大量插入資料的時候,會發現到了某乙個時間,效能就突然下降了,如果突然出現了這樣的情況,我們都會從 log 檔案裡或者 statistics 上面來確認是否出現了 write stall。

通常 write stall 會在幾個地方出現

當需要等待被 flush 到 level 0 的 memtable 到了或者超過了 max_write_buffer_number,rocksdb 就會完全 stop 寫入,直到 flush 結束。同時,當 max_write_buffer_number 大於等於 3,需要 flush 的 memtable 數量已經大於等於 max_writer_buffer_number - 1 的時候,rocksdb 就會 stall 寫入。leveldb因為只會有乙個memtable和immemtable,所以沒有這個。

當 level 0 的 sst file 的數量達到 level0_slowdown_writes_tigger 的時候,rocksdb 就會 stall 寫入。當 level 0 的 sst file 的數量達到 level0_stop_writes_trigger 的時候,rocksdb 就會 stop 寫入,直到 level 0 到 level 1 之間的 compaction 完成,level 0 sst file 的數量減少之後。

當預計的 compaction 資料的大小達到了 sofe_pending_compaction_bytes 之後,rocksdb 會 stall 寫入。當達到了 hard_pending_compaction_bytes 之後,則會 stop 寫入。這個機制是leveldb所沒有的。

我們並不能杜絕 stall,只能通過配置盡量的改善。

當發生 stall 的時候,rocksdb 會降低寫入的速度到 delayed_write_rate,甚至有可能比這個更低。另外需要注意的是slowdown/stop trigger 或者 pending compaction limit 都是針對不同的 cf 的,但 stall 是針對整個 db 的,如果程式裡面有多個 cf,乙個 cf 出現了 stall 的情況,整個 db 都會 stall。

如果 stall 是因為 pending flush memtable 不及時導致的,我們可以嘗試:

編譯ROCKSDB總結

rocksdb是挺好的乙個東西,就是取得乙個可用的庫太麻煩。之前我是用的rocksdbsharp裡面他有編譯好windows 和 linux的庫 兼 容性還挺好,ubuntu win10 直接跑沒毛病,可惜他是去年build的了,我要用的checkpoint 這麼重要的功能,他這個版本沒有。於是乎只...

RocksDB使用小結

一 介紹 rocksdb是facebook的乙個實驗專案,目的是希望能開發一套能能在伺服器壓力下,真正發揮高速儲存硬體 特別是flash儲存 效能的高效資料庫系統。這是乙個c 庫,允許儲存任意長度二進位制kv資料。支援原子讀寫操作。rocksdb依靠大量靈活的配置,使之能針對不同的生產環境進行調優,...

ArangoDB 儲存引擎(RocksDB)

儲存引擎位於arangodb資料庫的最底層。儲存引擎負責將文件儲存在磁碟上,在記憶體中儲存副本,提供索引和快取以加快查詢速度。3.1版本之前,arangodb僅支援記憶體對映檔案 mmfiles 作為唯一的儲存引擎。從3.2之後,arangodb開始支援可插拔的儲存引擎。第二個支援的引擎是來自fac...