Tuning RocksDB - Write Stalls

RocksDB 使用 LSM 的方式用來提升寫入的性能,但如果寫入過快察滑,超過了 RocksDB 處理的極限打厘,RocksDB 就會考慮對寫入進(jìn)行降速處理。這個在 TiKV 調(diào)優(yōu)的時候遇到過很多次贺辰,當(dāng)我們持續(xù)大量插入數(shù)據(jù)的時候户盯,會發(fā)現(xiàn)到了某一個時間,性能就突然下降了饲化,如果突然出現(xiàn)了這樣的情況莽鸭,我們都會從 LOG 文件里或者 statistics 上面來確認(rèn)是否出現(xiàn)了 write stall。

Where Stall

通常 write stall 會在幾個地方出現(xiàn)

Too many memtables

當(dāng)需要等待被 flush 到 level 0 的 memtable 到了或者超過了 max_write_buffer_number滓侍,RocksDB 就會完全 stop 寫入蒋川,直到 flush 結(jié)束。同時撩笆,當(dāng) max_write_buffer_number 大于等于 3捺球,需要 flush 的 memtable 數(shù)量已經(jīng)大于等于 max_writer_buffer_number - 1 的時候,RocksDB 就會 stall 寫入夕冲。我們可以在 LOG 里面看到如下的信息:

Stopping writes because we have 5 immutable memtables (waiting for flush), max_write_buffer_number is set to 5

Stalling writes because we have 4 immutable memtables (waiting for flush), max_write_buffer_number is set to 5

Too many level-0 SST files

當(dāng) level 0 的 SST file 的數(shù)量達(dá)到 level0_slowdown_writes_tigger 的時候氮兵,RocksDB 就會 stall 寫入。當(dāng) level 0 的 SST file 的數(shù)量達(dá)到 level0_stop_writes_trigger 的時候歹鱼,RocksDB 就會 stop 寫入泣栈,直到 level 0 到 level 1 之間的 compaction 完成,level 0 SST file 的數(shù)量減少之后弥姻。我們可以在 LOG 里面看到如下的信息:

Stalling writes because we have 4 level-0 files

Stopping writes because we have 20 level-0 files

Too many pending compaction bytes

當(dāng)預(yù)計的 compaction 數(shù)據(jù)的大小達(dá)到了 sofe_pending_compaction_bytes 之后南片,RocksDB 會 stall 寫入。當(dāng)達(dá)到了 hard_pending_compaction_bytes 之后庭敦,則會 stop 寫入疼进。我們可以在 LOG 里面看到如下的信息:

Stalling writes because of estimated pending compaction bytes 500000000

Stopping writes because of estimated pending compaction bytes 1000000000

Mitigate Stall

需要注意的是,很多時候秧廉,受限于機(jī)器的性能伞广,我們并不能杜絕 stall拣帽,只能通過配置盡量的改善。

當(dāng)發(fā)生 stall 的時候嚼锄,RocksDB 會降低寫入的速度到 delayed_write_rate减拭,甚至有可能比這個更低。另外需要注意的是 slowdown/stop trigger 或者 pending compaction limit 都是針對不同的 CF 的区丑,但 stall 是針對整個 DB 的拧粪,如果程序里面有多個 CF,一個 CF 出現(xiàn)了 stall 的情況刊苍,整個 DB 都會 stall既们。

如果 stall 是因為 pending flush memtable 不及時導(dǎo)致的濒析,我們可以嘗試:

  • 增大 max_background_flushes 正什,這樣就能有更多的線程同時 flush memtable。
  • 增大 max_write_buffer_number 号杏,用更小的 memtable 來提升 flush 的速度婴氮。

如果 stall 是因為 level 0 或者 pending compaction 太多導(dǎo)致,我們就需要考慮提升 compaction 的速度盾致。另外主经,也可以減小寫放大,因為寫放大越小庭惜,需要 compaction 的數(shù)據(jù)量就越小罩驻。所以我們可以嘗試:

  • 增大 max_background_compactions,用更多的線程來進(jìn)行 compaction护赊。
  • 增大 write_buffer_size惠遏,這樣就能有更大的 memtable,用來減少寫放大
  • 增加 min_write_buffer_number_to_merge骏啰,在 flush 之前先將 memtable merge节吮,減少寫入 key 的數(shù)量,但這樣會影響從 memtable read 的性能判耕。

小結(jié)

對于寫性能要求非常高的系統(tǒng)來說透绩,write stall 是一個繞不過去的坎,所以我們只能在不同的場景下面通過配置來在 write壁熄,read 和 space 這三個上面做平衡帚豪。所以需要更加深入的去理解 RocksDB 那一坨參數(shù)以及相關(guān)的含義。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末草丧,一起剝皮案震驚了整個濱河市狸臣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌方仿,老刑警劉巖固棚,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件统翩,死亡現(xiàn)場離奇詭異艳吠,居然都是意外死亡未玻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門野芒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呜师,“玉大人娶桦,你說我怎么就攤上這事≈梗” “怎么了衷畦?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長知牌。 經(jīng)常有香客問我祈争,道長,這世上最難降的妖魔是什么角寸? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任菩混,我火速辦了婚禮,結(jié)果婚禮上扁藕,老公的妹妹穿的比我還像新娘沮峡。我一直安慰自己,他們只是感情好亿柑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布邢疙。 她就那樣靜靜地躺著,像睡著了一般望薄。 火紅的嫁衣襯著肌膚如雪疟游。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天式矫,我揣著相機(jī)與錄音乡摹,去河邊找鬼。 笑死采转,一個胖子當(dāng)著我的面吹牛聪廉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播故慈,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼板熊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了察绷?” 一聲冷哼從身側(cè)響起干签,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拆撼,沒想到半個月后容劳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喘沿,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年竭贩,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚜印。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡留量,死狀恐怖窄赋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情楼熄,我是刑警寧澤忆绰,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站可岂,受9級特大地震影響错敢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜青柄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一伐债、第九天 我趴在偏房一處隱蔽的房頂上張望预侯。 院中可真熱鬧致开,春花似錦、人聲如沸萎馅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糜芳。三九已至飒货,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峭竣,已是汗流浹背塘辅。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皆撩,地道東北人扣墩。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像扛吞,于是被迫代替她去往敵國和親呻惕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容