【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區域。
當啟用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的表空間:
3、啟用IM FastStart,並使用FastStart LOB的默認NOLOGGING選項將fs_tbs表空間指定為FastStart區域:
4、查詢FastStart區域的狀態和大小:
在這個階段,FastStart區域中沒有用戶數據。
5、查詢FastStart LOB的日誌記錄模式:
6、強製IM列存儲重新填充任何當前填充的對象。以下查詢強製重新銷售銷售,產品和客戶表:
7、查詢FastStart區域的大小:
通過查詢V$ INMEMORY_FASTSTART_AREA視圖獲取當前指定為FastStart區域的表空間的名稱。
如果沒有啟用FastStart表空間,則STATUS列顯示NOT ENABLED; 否則,該列顯示表空間名稱。
先決條件
要檢索FastStart表空間的名稱,必須具有管理員權限。
如何檢索FastStart表空間的名稱:
1、在SQL * Plus或SQL Developer中,使用必要的權限登錄數據庫。
2、查詢V $ INMEMORY_FASTSTART_AREA視圖。
以下示例獲取當前IM FastStart表空間的名稱
此示例查詢FastStart表空間的名稱和狀態(包括示例輸出):
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表空間的名稱:
3、創建一個名為new_fs_tbs的表空間:
4、將FastStart區域遷移到新的表空間:
5、查詢當前FastStart表空間的名稱:
本文來自Oracle官方文檔翻譯,若有不能理解之處,請參考原文。
文章轉自數據和雲公眾號,原文鏈接
最後更新:2017-07-18 10:02:50