閱讀127 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【12.2新特性】In-Memory列存儲的FastStart管理

啟用IM列存儲時,In-Memory FastStart通過將IMCU直接存儲在磁盤上來優化IM列存儲中數據庫對象的數量,使數據庫通過將列數據存儲在磁盤上更快地打開。數據庫在崩潰和恢複之後或在複製到其他Oracle RAC實例期間也可以從IM FastStart區域讀取。

簡介

當數據庫實例重新啟動時,IM列存儲將被填充,這個過程可能是I /O密集型和CPU密集型的慢速操作。

啟用IM FastStart時,數據庫會定期將一列列數據保存到磁盤中,以便在實例重新啟動期間更快的重新填充。 如果數據庫在關閉後重新打開,則數據庫將從FastStart區域讀取列數據,然後將其填充到IM列存儲中,確保維護所有事務一致性。


在數據庫處於open狀態並可操作的情況下,IM FastStart表空間需要間歇性的I/O操作,在數據庫重啟時,由於避免了CPU密集型壓縮和格式化數據的過程,因此在一定程度上提高了性能。

實現原理

FastStart區域是指定的表空間,用於存儲和管理INMEMORY對象的數據。 Oracle數據庫會自動管理FastStart表空間,無需DBA幹預。


每個PDB或非CDB隻允許一個FastStart區域和一個指定的FastStart表空間。 指定的IM FastStart表空間後,不能更改或刪除。 在Oracle RAC數據庫中,所有節點共享FastStart數據。

啟用FastStart

使用DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE過程啟用FastStart表空間。 空間管理工作進程(Wnnn)創建一個名為SYSDBinstance_name_LOBSEG $的空的SecureFiles LOB。


FastStart區域的管理

在啟用FastStart區域後的第一次填充或重新填充期間,數據庫將會創建FastStart區域。


數據庫自動管理FastStart區域,具體包括:

1、每當發生對象的填充或重新生成時,數據庫將其列數據寫入FastStart區域。

空間管理工作進程(Wnnn)將IMCU(而不是IMEU或SMU)寫入名為SYSDBinstance_name_LOBSEG $的SecureFiles LOB。 數據庫將FastStart元數據寫入SYSAUX表空間,SYSAUX表空間必須一直處於online狀態。

根據CU進行DML操作的頻繁程度,FastStart區域中的CU和IM列存儲中的CU之間可能存在滯後。 DML越頻繁的一個CU,數據庫在IM列存儲中填充的頻率越低,將其寫入FastStart區域的頻率也越低。 如果數據庫崩潰,那麼在IM列存儲中填充的一些CU可能不存在於FastStart區域中。


2、如果在段上定義ADO策略,則數據庫將根據策略中的規則管理FastStart區域中的段。 例如,如果ADO指定對象根據策略將其屬性更改為NO INMEMORY,則IM列存儲從FastStart區域中刪除其數據。


3、如果填充對象的屬性更改為NOINMEMORY,則數據庫將自動從FastStart區域中刪除其IMCU。


4、如果FastStart表空間的空間不足,則數據庫使用內部算法來刪除最舊的段,並繼續寫入FastStart區域。 如果沒有剩餘空間,則數據庫停止寫入FastStart區域。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


當啟用FastStart區域時,數據庫還會將這些段的IMCU寫入fs_tbs中的FastStart區域。 如果數據庫重新打開或實例重新啟動,則數據庫可以驗證IMCU進行修改以確保事務一致性,並重新使用IMCU。 無論FastStart區域是否啟用,數據庫都會將數據塊和磁盤區段存儲在用戶表空間中。

FastStart區域的數據讀取

FastStart區域定義的是數據庫重新打開時加載哪些數據,而不是什麼時候加載數據。

當數據庫重新打開時,加載的數據量由優先級決定。例如,數據庫根據需要填充PRIORITY NONE的對象時,優先級為CRITICAL的對象會優先於優先級為LOW的對象被填充。


例如,在單實例數據庫中,銷售,客戶和產品表在IM列存儲中填充有PRIORITY NONE。在每次重新生成時,數據庫將這些表的IMCU保存到FastStart區域。假設實例意外終止,重新打開數據庫時,IM列存儲空。如果一個查詢掃描了銷售,客戶或產品表,那麼數據庫將該表的IMCU從FastStart區域加載到IM列存儲中。


在大多數情況下,FastStart區域會增加計算的速度。但是,如果FastStart區域中存儲的任何CU達到DML活動的內部閾值,則數據庫將從數據文件而不是FastStart區域填充行數據。

啟用FastStart

使用DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE過程為FastStart區域指定表空間。

設置為FastStart區域創建的LOB的日誌記錄模式。如果nologging參數設置為FALSE(默認),則數據庫將使用NOLOGGING選項創建LOB。如果nologging設置為TRUE,則數據庫將使用LOGGING選項創建FastStart LOB。


先決條件

要創建FastStart區域,必須滿足以下先決條件:

1、將被指定為FastStart區域的表空間必須存在。

2、此表空間必須有足夠的空間存儲IM列存儲的數據,並且在將其指定為FastStart區域之前,它不能包含任何其他數據。 Oracle建議您創建具有INMEMORY_SIZE設置大小的兩倍的FastStart表空間。

3、必須具有管理員權限。


如何創建IM FastStart區域:

1、在SQL * Plus或SQL Developer中,使用必要的權限登錄數據庫。

2、使用DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE過程。


以下示例創建一個表空間並將其指定為FastStart區域。

1、在SQL * Plus或SQL Developer中,以管理權限登錄數據庫。


2、創建一個名為fs_tbs的表空間:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


3、啟用IM FastStart,並使用FastStart LOB的默認NOLOGGING選項將fs_tbs表空間指定為FastStart區域:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


4、查詢FastStart區域的狀態和大小:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在這個階段,FastStart區域中沒有用戶數據。


5、查詢FastStart LOB的日誌記錄模式:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


6、強製IM列存儲重新填充任何當前填充的對象。以下查詢強製重新銷售銷售,產品和客戶表:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


7、查詢FastStart區域的大小:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


通過查詢V$ INMEMORY_FASTSTART_AREA視圖獲取當前指定為FastStart區域的表空間的名稱。


如果沒有啟用FastStart表空間,則STATUS列顯示NOT ENABLED; 否則,該列顯示表空間名稱。

先決條件

要檢索FastStart表空間的名稱,必須具有管理員權限。



如何檢索FastStart表空間的名稱:

1、在SQL * Plus或SQL Developer中,使用必要的權限登錄數據庫。

2、查詢V $ INMEMORY_FASTSTART_AREA視圖。


以下示例獲取當前IM FastStart表空間的名稱

此示例查詢FastStart表空間的名稱和狀態(包括示例輸出):

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


FastStart區域的遷移

可以通過在DBMS_INMEMORY_ADMIN包中運行FASTSTART_MIGRATE_STORAGE過程將FastStart區域遷移到其他表空間。


在非CDB或PDB中,一次隻能指定一個表空間作為FastStart區域。

先決條件

1、將被指定為新的FastStart區域的表空間必須存在。

2、此表空間必須有足夠的空間來存儲IM列存儲的數據,並且在將其指定為FastStart區域之前,它不能包含任何其他數據。

3、必須具有管理員權限。


遷移IM FastStart區域的步驟:

1、在SQL * Plus或SQL Developer中,使用必要的權限登錄數據庫。

2、運行DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE過程。


以下示例將FastStart區域遷移到不同的表空間


將IM FastStart區域遷移到new_fs_tbs表空間。

1、在SQL * Plus或SQL Developer中,以管理權限登錄數據庫。

2、查詢當前FastStart表空間的名稱:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


3、創建一個名為new_fs_tbs的表空間:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


4、將FastStart區域遷移到新的表空間:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


5、查詢當前FastStart表空間的名稱:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


本文來自Oracle官方文檔翻譯,若有不能理解之處,請參考原文。


文章轉自數據和雲公眾號,原文鏈接

最後更新:2017-07-18 10:02:50

  上一篇:go  獨家:在MAC上運行Docker和Oracle 12.2數據庫環境
  下一篇:go  Oracle初學者入門指南-什麼是 Metalink 或 MOS ?