OceanBase:轉(zhuǎn)儲(chǔ)&合并時(shí)如何處理MVCC多版本數(shù)據(jù)

在 memtable 中翻擒,數(shù)據(jù)更新以TransNode的形式串到對(duì)應(yīng)MvccRow鏈表上隘竭,形成多版本數(shù)據(jù)程拭,每個(gè) MvccRow 鏈表以 rowkey(也就是主鍵)為標(biāo)識(shí)。

當(dāng)發(fā)生轉(zhuǎn)儲(chǔ)和合并時(shí)多版本數(shù)據(jù)會(huì)被如何處理筷狼?

  • 轉(zhuǎn)儲(chǔ)的時(shí)候會(huì)根據(jù)參數(shù) undo_retention 來決定保留多久的多版本數(shù)據(jù)瓶籽,默認(rèn) 1800 秒,超出時(shí)間的多版本數(shù)據(jù)會(huì)在轉(zhuǎn)儲(chǔ)時(shí)刪除埂材,如果還有事務(wù)要讀取被刪除的版本塑顺,會(huì)失敗。
  • 不止轉(zhuǎn)儲(chǔ)時(shí)會(huì)刪俏险,mini minor merge茬暇、minor merge 時(shí)也會(huì)刪超出undo_retention時(shí)間的多版本數(shù)據(jù)
  • 在合并時(shí),Major SSTable 只會(huì)保留最新版本的數(shù)據(jù)寡喝,并根據(jù) undo_retention 的值來決定是否保留上層 Mini SSTable、Minor SSTable 中的多版本

這會(huì)帶來一個(gè)問題:如果有一個(gè)事務(wù)需要讀取舊版本數(shù)據(jù)勒奇,可能會(huì)因?yàn)槎喟姹緮?shù)據(jù)被清理了無法讀取成功预鬓。
V4.1版本做調(diào)整,多版本數(shù)據(jù)上有一個(gè)引用計(jì)數(shù)器赊颠,當(dāng)引用計(jì)數(shù)器為 0(也就是沒有被任何事務(wù)讀雀穸)才會(huì)被刪除。不過竣蹦,數(shù)據(jù)盤滿的場景是例外顶猜,此時(shí)還是會(huì)強(qiáng)制刪除舊版本數(shù)據(jù)。

驗(yàn)證方法

下面設(shè)計(jì)一個(gè)實(shí)驗(yàn)進(jìn)行驗(yàn)證(V3 版本):

  1. 先觸發(fā)一次合并痘括,并將 undo_retention 設(shè)置成一個(gè)較小的值
alter system set max_kept_major_version_number=1;
alter system major freeze;
set global undo_retention=120;
  1. session1 開啟 serializable 隔離級(jí)別事務(wù)长窄,查詢表 tab_no_queue
set transaction_isolation='serializable';
start transaction;
select * from tab_no_queue where rownum<10;
  1. session2 更新表 tab_no_queue并提交
set transaction_isolation='serializable';
update tab_no_queue set ADDR='0' where mod(id,5) in (4);
commit;
  1. 等待 120 秒,session3 轉(zhuǎn)儲(chǔ) tab_no_queue 表
alter system minor freeze partition_id='0%0@1100611139453789';

查看轉(zhuǎn)儲(chǔ)完成纲菌,并且只發(fā)生 mini merge(也就是將 memtable 寫到磁盤的 mini sstable):
  1. session1 再次執(zhí)行同樣的查詢

serializable 隔離級(jí)別要求同一個(gè)事務(wù)兩次讀取結(jié)果一樣挠日,但是 session2 的事務(wù)更新了數(shù)據(jù)并提交,轉(zhuǎn)儲(chǔ)時(shí)把超出 undo_retention 時(shí)間的舊版本數(shù)據(jù)清理了翰舌,所以 session1 讀不到舊版本的數(shù)據(jù)(這里沒有直接報(bào)錯(cuò)嚣潜,而是一直卡著):

可以從 observer.log 中看到一直在重試,但是讀取不到指定版本的數(shù)據(jù):
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末椅贱,一起剝皮案震驚了整個(gè)濱河市懂算,隨后出現(xiàn)的幾起案子只冻,更是在濱河造成了極大的恐慌,老刑警劉巖计技,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喜德,死亡現(xiàn)場離奇詭異,居然都是意外死亡酸役,警方通過查閱死者的電腦和手機(jī)住诸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涣澡,“玉大人贱呐,你說我怎么就攤上這事∪牍穑” “怎么了奄薇?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抗愁。 經(jīng)常有香客問我馁蒂,道長,這世上最難降的妖魔是什么蜘腌? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任沫屡,我火速辦了婚禮,結(jié)果婚禮上撮珠,老公的妹妹穿的比我還像新娘沮脖。我一直安慰自己,他們只是感情好芯急,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布勺届。 她就那樣靜靜地躺著,像睡著了一般娶耍。 火紅的嫁衣襯著肌膚如雪免姿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天榕酒,我揣著相機(jī)與錄音胚膊,去河邊找鬼。 笑死想鹰,一個(gè)胖子當(dāng)著我的面吹牛澜掩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杖挣,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼肩榕,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起株汉,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤筐乳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乔妈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝙云,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年路召,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勃刨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡股淡,死狀恐怖身隐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唯灵,我是刑警寧澤贾铝,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站埠帕,受9級(jí)特大地震影響垢揩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敛瓷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一叁巨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呐籽,春花似錦锋勺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苍姜。三九已至牢酵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衙猪,已是汗流浹背馍乙。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垫释,地道東北人丝格。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像棵譬,于是被迫代替她去往敵國和親显蝌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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