Oracle Database 12c In-Memory特性之執行計劃對比
DBIM(DatabaseIn-Memory)是Oracle12c資料庫的選項,類似於RAC,ADG。
DBIM能夠實現對混合類型應用的支持,傳統的以行形式保存的數據滿足OLTP應用,列形式保存的數據滿足以查詢為主的OLAP應用。IM組件可以和其他資料庫組件功能使用像Sybase IQ, SAP HANA,並不需要用戶單獨開發或者修改應用程序,就可以非常方便的實現基於實時資料庫分析的轉變
主要目的是利用內存的速度和優化的列格式來加速分析
DBIM的預設的參數有:
inmemory_size big integer 0
默認是不開啟的。
DBIM在內存中需要預留空間,屬於SGA中的靜態池分,是純列式存儲。列存儲不會取代緩衝區緩存,而是作為一種補充,以便數據現在可同時以行格式和列格式存儲在內存中。
通過INMEMORY_SIZE控制DBIM內存的大小,至少為100M,當其大於0時,啟用DBIM功能。
開啟步驟如下:
alter system set inmemory_size=200M scope=spfile sid="*";
重啟資料庫
在資料庫啟動時,可以看到SGA中分配的Inmemory Area區域。
建一張測試表:
create table tab_inmas select * from dba_objects;
將該表數據設置存儲在內存中
SQL> alter table tab_inm inmemory;
Table altered.
SQL> SET AUTOTRACE on
不在inmemory執行計劃如下:
視圖V$INMEMORY_AREA可以查詢內存區域的使用情況,其中USED_BYTES表明當前已經使用的內存:
從上邊的執行計劃看,使用in-memory效果還是比較明顯的。
In-Memory需要注意如下及不支持:
1、索引組織表(IOT)和集群表
2、LONG何out-of-line LOB也不支持
12.2之前不支持在ADG的standby實例中使用
另外,需要注意如下2點:
(1)該特性不支持SYS用戶下的對象,不支持SYSTEM、SYSAUX表空間下的對象
(2)Objects that are smaller than 64KB are not populated into memory
如果要支持sys用戶和sys表空間裡面的對象,需要修改隱含參數_inmemory_enable_sys為TRUE
(3)強烈建議將每個RAC節點的IM列存儲設置為相同大小。
(4)熱表、熱分區、經常訪問的列放入In-Memory
TAG:老杜隨筆 |