Oracle:19c 新特性——Memoptimized Rowstore 簡介

dapolan發表於2022-03-08

簡介

Memoptimized Rowstore 為應用程式(如物聯網(IoT)應用程式)提供了高效能資料流,這些應用程式通常以單行插入的方式同時從大量客戶端流進少量資料,並以非常高的頻率為客戶端查詢資料。

功能

  • Fast Ingest
    Fast Ingest 最佳化了對資料庫中高頻單行資料插入的處理。Fast Ingest 在將插入寫入磁碟之前使用 large pool 緩衝資料,從而提高資料插入效能。
  • Fast Lookup
    Fast Lookup 支援從資料庫中 Fast Lookup 資料以進行高頻查詢。Fast Lookup 在 SGA 中使用一個稱為 memoptimize pool 的單獨記憶體區域來緩衝從表查詢的資料,從而提高查詢效能。

Fast Ingest

原理

Fast Ingest 的目的是支援那些生成大量資訊資料的應用程式,這些資料在聚合中具有重要價值,但不一定需要完全的 ACID要求。物聯網(IoT)中的許多應用都有一個快速的“火了就忘了”型別的工作量,比如感測器資料、智慧儀表資料,甚至交通攝像頭。對於這些應用程式,可能會收集大量資料並將其寫入資料庫,以便以後進行分析。

下圖展示瞭如何使用 Memoptimized Rowstore - Fast Ingest 特性。

攝取的資料在 large pool 中進行批處理,不會立即寫入資料庫。因此,攝取過程非常快。可以有效地攝取非常大量的資料,而不必處理個別的行。但是,如果在將攝取的資料寫入資料庫檔案之前資料庫就關閉了,則可能會丟失資料。

Fast Ingest 與正常的 Oracle 資料庫事務處理有很大的不同,在正常的 Oracle 資料庫事務處理中,資料被記錄下來,並且一旦寫入資料庫(即提交)就不會丟失。為了實現最大的吞服吞吐量,一般的 Oracle 事務機制將被繞過,應用程式的責任是檢查所有資料是否確實被寫入資料庫。新增了特殊的 API,可以呼叫這些 API 來檢查資料是否已經寫入資料庫。

Commit 操作在 Fast Ingest 攝取上下文中沒有意義,因為它不是傳統 Oracle 意義上的事務。沒有回滾插入的能力。在將資料從 Fast Ingest 攝取緩衝區重新整理到磁碟之前,您也無法查詢資料。透過查詢 V$MEMOPTIMIZE_WRITE_AREA 檢視,你可以看到一些關於 Fast Ingest 快取的管理資訊。

您還可以使用包 DBMS_MEMOPTIMIZE 和 DBMS_MEMOPTIMIZE_ADMIN 來執行一些功能,比如從 large pool 中 Fast Ingest 資料並確定已寫入資料的序列 id。

只有當資料從 large pool 中的 Fast Ingest 區域寫入到磁碟時,才會執行索引操作和約束檢查。如果在後臺程式將資料寫入磁碟時發生主鍵衝突,那麼資料庫將不會將這些行寫入資料庫。

假設(對於大多數應用程式,但不是所有應用程式)所有插入的資料都需要寫入資料庫,那麼應用程式插入程式必須在銷燬資料之前檢查插入的資料是否已經實際寫入資料庫。只有當確認發生時,資料才能從插入過程中刪除。

限制

具有以下特徵的表不能使用 Fast Ingest:

    • 磁碟壓縮
    • 記憶體壓縮
    • 列的預設值
    • 加密
    • 函式索引
    • 域的索引
    • 點陣圖索引
    • 點陣圖連線索引
    • ref型別
    • varray型別
    • OID美元型別
    • 未使用的列
    • 虛擬列
    • lob
    • 觸發器
    • 二進位制檔案列
    • 外來鍵
    • 行歸檔
    • 看不見的列
  • 臨時表
  • 巢狀表
  • 索引組織表
  • 外部表
  • 按需重新整理的物化檢視
  • 不支援子分割槽。
  • 不支援以下分割槽型別
    • REFERENCE
    • SYSTEM
    • INTERVAL
    • AUTOLIST

注意事項

  • 因為 Fast Ingest 攝取 large pool 中的資料,所以在系統故障時有可能丟失資料。為了避免資料丟失,客戶端必須在執行插入操作後保留資料的本地副本,以便在將資料寫入磁碟之前,在系統出現故障時可以重放插入操作。客戶機可以使用DBMS_MEMOPTIMIZE包子程式來跟蹤插入的永續性。插入資料寫入磁碟後,客戶端可以銷燬插入資料的本地副本。
  • 查詢不會從 large pool 中讀取資料,因此,在將使用 Fast Ingest 的資料寫入磁碟之前,無法查詢使用 Fast Ingest 的資料。
  • 父-子事務必須同步以避免錯誤。例如,如果父資料尚未寫入磁碟,則插入到 large pool 中的行的外來鍵插入和更新可能返回錯誤。
  • 與常規插入類似,Fast Ingest 支援索引操作。但是,對於 Fast Ingest,資料庫在將資料寫入磁碟時執行索引操作,而不是在將資料寫入 large pool 時執行索引操作。
  • JSON 只支援儲存為 4K VARCHAR2,而不支援儲存為 LOB。不支援擴充套件的 32K 字串長度(即max_string_size= Extended)。
  • 分配給 large pool 中 Fast Ingest 攝取緩衝區的大小在建立後就固定了。如果緩衝區填滿,則進一步攝取將等待後臺程式耗盡緩衝區。

注意:可以將表配置為同時使用 Fast Ingest 和 Fast Lookup。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014851/viewspace-2867429/,如需轉載,請註明出處,否則將追究法律責任。

相關文章