CMU15-445 數(shù)據(jù)庫系統(tǒng)播客:Oracle In-Memory 數(shù)據(jù)庫揭秘 - 雙格式架構(gòu)如何驅(qū)動(dòng)實(shí)時(shí)企業(yè)
需求:實(shí)時(shí)企業(yè)的速度渴求
在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的世界里,“實(shí)時(shí)”不再是加分項(xiàng),而是必需品。無論是保險(xiǎn)公司需要秒級(jí)評(píng)估風(fēng)險(xiǎn)調(diào)整保費(fèi),零售商希望在顧客離店前推送個(gè)性化優(yōu)惠,還是金融機(jī)構(gòu)必須即時(shí)識(shí)別并攔截欺詐交易,這些場景都對(duì)數(shù)據(jù)處理速度提出了前所未有的要求。企業(yè)需要一個(gè)能夠 即時(shí)響應(yīng)數(shù)據(jù)變化并迅速做出決策 的強(qiáng)大引擎。
為了滿足這一需求,數(shù)據(jù)庫技術(shù)必須進(jìn)化。傳統(tǒng)磁盤數(shù)據(jù)庫的 I/O 瓶頸使其難以勝任, 內(nèi)存數(shù)據(jù)庫(In-Memory Database) 因此應(yīng)運(yùn)而生,成為推動(dòng)這場變革的核心技術(shù)。
創(chuàng)新的基石:飛速發(fā)展的硬件趨勢
Oracle In-Memory 技術(shù)的誕生并非空中樓閣,而是建立在堅(jiān)實(shí)的硬件發(fā)展之上。以下幾大趨勢為其提供了可能性:
- 海量廉價(jià)的內(nèi)存 :DRAM 乃至新興的 持久化內(nèi)存(Persistent Memory, PMEM) ,為將海量數(shù)據(jù)置于內(nèi)存中提供了經(jīng)濟(jì)可行性。
- 多級(jí)高速緩存 :現(xiàn)代 CPU 擁有越來越大的 L3 緩存(例如 32MB),能極大加速熱點(diǎn)數(shù)據(jù)的訪問。
- 眾核處理器 :擁有數(shù)十個(gè)核心的 CPU 提供了強(qiáng)大的并行處理能力。
- SIMD 向量處理 :單指令多數(shù)據(jù)(Single Instruction, Multiple Data)技術(shù),如 AVX-512,允許 CPU 在一個(gè)時(shí)鐘周期內(nèi)對(duì)多個(gè)數(shù)據(jù)單元執(zhí)行相同操作,是實(shí)現(xiàn)數(shù)據(jù)掃描加速的“核武器”。
- 高速網(wǎng)絡(luò)與 NUMA 架構(gòu) :100Gb/s RoCE 等技術(shù)加速了節(jié)點(diǎn)間數(shù)據(jù)傳輸,但也帶來了對(duì) NUMA(Non-Uniform Memory Access)架構(gòu)下內(nèi)存訪問延遲差異的關(guān)注。
在這些趨勢中,Oracle 尤其將 持久化內(nèi)存(PMEM)視為“游戲規(guī)則的改變者”。它容量遠(yuǎn)大于 DRAM,速度遠(yuǎn)快于閃存,且數(shù)據(jù)在斷電后不丟失。這意味著不僅可以將整個(gè)工作負(fù)載放入內(nèi)存 ,還能極大提升數(shù)據(jù)庫的可用性和重啟速度。
核心架構(gòu):兩全其美的“雙格式”設(shè)計(jì)
傳統(tǒng)數(shù)據(jù)庫設(shè)計(jì)面臨一個(gè)經(jīng)典的二選一難題:行式存儲(chǔ)還是列式存儲(chǔ)?
- 行式存儲(chǔ) (Row Format) :數(shù)據(jù)按行連續(xù)存放。這非常適合 事務(wù)處理 (OLTP) ,例如更新一名用戶的個(gè)人信息,因?yàn)樗邢嚓P(guān)字段都在一起,一次 I/O 即可完成。但對(duì)于分析查詢(如計(jì)算所有用戶的平均年齡),則效率低下,因?yàn)樗枰x取大量無關(guān)數(shù)據(jù)。
- 列式存儲(chǔ) (Column Format) :數(shù)據(jù)按列連續(xù)存放。這天然適合 分析查詢 (Analytics) ,計(jì)算平均年齡只需讀取“年齡”這一列,數(shù)據(jù)緊湊,緩存效率極高。但對(duì)于 OLTP 操作,更新一行數(shù)據(jù)則可能需要修改多個(gè)分散的文件,效率很低。
Oracle 的天才之處在于它沒有選擇,而是全都要。其 雙格式架構(gòu) (Dual-Format Architecture) 在內(nèi)存中 同時(shí)維護(hù) 了兩種數(shù)據(jù)表示:
- 行式存儲(chǔ) :存在于傳統(tǒng)的緩沖區(qū)緩存 (Buffer Cache) 中,用于服務(wù)高速的 OLTP 操作。
- 列式存儲(chǔ) :存在于全新的內(nèi)存列存儲(chǔ) (In-Memory Column Store) 中,用于服務(wù)閃電般的分析查詢。
這兩種格式 同時(shí)活躍且事務(wù)一致 。最妙的是,數(shù)據(jù)庫的查詢優(yōu)化器會(huì)自動(dòng)判斷查詢類型,智能地選擇最佳路徑——OLTP 查詢走行存儲(chǔ),分析查詢走列存儲(chǔ),整個(gè)過程對(duì)應(yīng)用透明,無需任何代碼修改。
關(guān)鍵挑戰(zhàn):如何維持?jǐn)?shù)據(jù)實(shí)時(shí)一致?
雙格式架構(gòu)面臨的最大挑戰(zhàn)是 數(shù)據(jù)一致性 。當(dāng)一行數(shù)據(jù)被修改(UPDATE 或 DELETE)時(shí),如何高效地同步到列存中而不拖垮性能?
Oracle 的解決方案非常巧妙:
- DML 操作優(yōu)先在行存中進(jìn)行 ,這沿用了 Oracle 數(shù)據(jù)庫數(shù)十年的成熟機(jī)制,確保了事務(wù)的穩(wěn)定和高效。
- 操作完成后,系統(tǒng)僅通過行 ID 在列存中 將受影響的行標(biāo)記為“無效” 。這是一個(gè)極輕量的元數(shù)據(jù)操作,幾乎不產(chǎn)生開銷。
- 后續(xù)的分析查詢?cè)趻呙枇写鏁r(shí),會(huì) 自動(dòng)跳過這些被標(biāo)記為無效的行 。如果查詢確實(shí)需要這些行的最新數(shù)據(jù),系統(tǒng)會(huì)智能地從行存(Buffer Cache)中獲取,確保結(jié)果的實(shí)時(shí)一致性。
但如果無效行越積越多,性能終將下降。為此,Oracle 引入了 快速后臺(tái)數(shù)據(jù)重填充 (Fast Background Repopulation) 機(jī)制,它像一個(gè)智能的垃圾回收器:
- 智能監(jiān)控 :系統(tǒng)持續(xù)跟蹤每個(gè)內(nèi)存壓縮單元 (IMCU) 的“臟”數(shù)據(jù)比例和訪問頻率。
- 雙緩沖無縫切換 :當(dāng)一個(gè) IMCU 需要刷新時(shí),系統(tǒng)會(huì)在后臺(tái)創(chuàng)建一個(gè)全新的、干凈的副本。在此期間,舊的 IMCU 仍然可以服務(wù)查詢。待新副本準(zhǔn)備就緒后,系統(tǒng)會(huì)原子地將請(qǐng)求切換過去,整個(gè)過程對(duì)用戶查詢零中斷。
- 增量與列級(jí)優(yōu)化 :重填充過程是增量的,可以復(fù)用舊列的元數(shù)據(jù)(如字典編碼),避免從零開始的昂貴計(jì)算。如果 DML 只修改了少數(shù)幾列,那么未受影響的列無需重填充,訪問它們的查詢性能絲毫不受影響。
性能引擎:每秒數(shù)十億行的向量化分析
如果說雙格式架構(gòu)是骨架,那么 向量化分析 (Vectorized Analytics) 就是讓 Oracle In-Memory 快如閃電的肌肉。它充分榨干了現(xiàn)代 CPU 的 SIMD 能力,實(shí)現(xiàn)了 單核每秒處理數(shù)十億行 的驚人吞吐量。
- SIMD 掃描 :傳統(tǒng)掃描是逐行比較。而 SIMD 掃描可以將幾十個(gè)數(shù)據(jù)(如“州”名)一次性加載到 512 位寬的向量寄存器中,然后用一條指令完成所有比較操作。判斷 64 個(gè)州是否為“加利福尼亞”只需一個(gè) CPU 周期,效率提升數(shù)十倍。
- SIMD 連接 (Joins) :通過引入 連接組 (Join Groups) 的概念,用戶可以提示數(shù)據(jù)庫哪些列常用于連接。Oracle 會(huì)使用相同的字典對(duì)這些列進(jìn)行編碼,使得昂貴的哈希連接退化為簡單的數(shù)組索引匹配,性能可再提升 2-3 倍。
- SIMD 聚合 (Aggregations)
聚合下推 (Aggregation Push-Down) :將 SUM, COUNT 等聚合計(jì)算直接下推到數(shù)據(jù)掃描層,在壓縮的、SIMD 友好的列格式上直接完成。這極大地減少了需要向上傳遞到 SQL 執(zhí)行層的數(shù)據(jù)量,性能提升可達(dá) 2-10 倍。
大數(shù)求和優(yōu)化 :針對(duì) Oracle 特有的 NUMBER 類型(可表示極大或極高精度的數(shù)字),傳統(tǒng)的逐個(gè)加法非常耗時(shí)。Oracle 通過構(gòu)建頻率表,將多次加法操作巧妙地轉(zhuǎn)換為一次乘法,可將復(fù)雜算術(shù)聚合性能提升高達(dá) 20 倍。
超越內(nèi)存:與 Exadata 集成,容量無限擴(kuò)展
盡管內(nèi)存越來越大,但總有數(shù)據(jù)放不下的情況。Oracle 通過其工程系統(tǒng) Exadata 完美解決了這個(gè)問題,將內(nèi)存處理能力 延伸到了存儲(chǔ)層 。
- 智能閃存緩存 (CellMemory) :Exadata 的存儲(chǔ)節(jié)點(diǎn)配備了大量閃存。這部分閃存可以被配置為 列式緩存 。數(shù)據(jù)庫會(huì)自動(dòng)將次熱點(diǎn)數(shù)據(jù)以列式格式緩存于此。
- 存儲(chǔ)分層 :由此形成了一個(gè)自動(dòng)化的數(shù)據(jù)分層體系:
最熱數(shù)據(jù) :駐留在 DRAM 的內(nèi)存列存儲(chǔ)中。
溫?cái)?shù)據(jù) :駐留在 Exadata 閃存的列式緩存中。
冷數(shù)據(jù) :保留在磁盤上。
- 存儲(chǔ)層計(jì)算 :最關(guān)鍵的是,在閃存中也可以執(zhí)行向量化掃描、連接和聚合等操作。查詢可以直接在存儲(chǔ)節(jié)點(diǎn)上完成大部分過濾和計(jì)算工作,只將最終的少量結(jié)果集返回給數(shù)據(jù)庫節(jié)點(diǎn),極大地減輕了網(wǎng)絡(luò)負(fù)擔(dān)和 CPU 壓力,實(shí)現(xiàn) 5-10 倍的智能掃描加速。
邁向未來:自驅(qū)動(dòng)的智能自動(dòng)化
手動(dòng)管理哪些數(shù)據(jù)應(yīng)該放入內(nèi)存是一項(xiàng)極其復(fù)雜的任務(wù),因?yàn)闃I(yè)務(wù)的訪問模式總是在變。Oracle 的最終目標(biāo)是實(shí)現(xiàn) “自驅(qū)動(dòng)數(shù)據(jù)庫 (Self-Driving Databases)” 。
- 熱力圖 (Heat Map) :系統(tǒng)在后臺(tái)持續(xù)監(jiān)控?cái)?shù)據(jù)塊級(jí)別的訪問模式,精準(zhǔn)地識(shí)別出數(shù)據(jù)的“熱度”。
- 自動(dòng)填充與驅(qū)逐 :根據(jù)熱力圖,數(shù)據(jù)庫會(huì)自動(dòng)將熱點(diǎn)數(shù)據(jù)加載到內(nèi)存中,同時(shí)將長期無人問津的冷數(shù)據(jù)移除,動(dòng)態(tài)優(yōu)化內(nèi)存使用。
- 列級(jí)別粒度 :這種智能管理甚至可以細(xì)化到列級(jí)別。例如,系統(tǒng)可以識(shí)別出 TPCH 基準(zhǔn)測試中的
L_COMMENT列很少被查詢,從而選擇不將它加載到內(nèi)存,或使用更高的壓縮比,為更有價(jià)值的列騰出空間。 - 混合掃描 (Hybrid Scans) :允許查詢?cè)趻呙鑳?nèi)存列存的同時(shí),從行存中獲取那些被排除在內(nèi)存外的大列(如圖片、文檔),兼顧了性能和成本。
終極愿景:一站式的融合分析平臺(tái)
Oracle 致力于將自身打造為一個(gè) “一站式 (One-Stop Shop)” 的融合數(shù)據(jù)庫。用戶無需為了處理 JSON、空間地理、圖、文本等不同類型的數(shù)據(jù)而購買、集成和維護(hù)多個(gè)專門的數(shù)據(jù)庫。所有數(shù)據(jù)都可以存放在 Oracle 中,并享受 In-Memory 帶來的極致加速。
- JSON 加速 :對(duì) JSON 文檔的查詢性能可提升 20-60 倍。
- 空間分析加速 :通過內(nèi)存中的空間摘要,空間查詢速度可提升高達(dá) 10 倍。
- 文本分析加速 :融合了關(guān)系型數(shù)據(jù)和文本的查詢速度可提升 3 倍。
這種融合架構(gòu)不僅提升了效率,更重要的是 增強(qiáng)了安全性 ,避免了將數(shù)據(jù)在不同系統(tǒng)間遷移所帶來的風(fēng)險(xiǎn)。
結(jié)論
Oracle Database In-Memory 并非簡單地將數(shù)據(jù)放入內(nèi)存,而是一套圍繞“雙格式架構(gòu)”構(gòu)建的、深度整合了最新硬件特性和智能化管理思想的復(fù)雜系統(tǒng)。它通過向量化處理、與 Exadata 的軟硬一體化設(shè)計(jì)、以及邁向自驅(qū)動(dòng)的自動(dòng)化管理,成功地解決了傳統(tǒng)數(shù)據(jù)庫在混合負(fù)載下的性能難題,為要求極致響應(yīng)速度的實(shí)時(shí)企業(yè)提供了強(qiáng)有力的技術(shù)支撐。





































