【Oracle】ORACLE 12c DB In-Memory簡述及啓用

    Oracle DB In-Memory是預裝在Oracle Database 12c12.1.0.2之後的版本)中的,不需要安裝其他軟件或者是重新編譯現有的的數據庫軟件。這是因爲In-Memory選項是作爲SGA的一個新組件無縫集成在Oracle Database軟件內核中的,所以如果Oracle Database已經安裝,則Oracle DB In-Memory同時也已安裝。In-Memory store默認是不開啓的,但是可以簡單通過幾個步驟來開啓改功能。

    比較重要的一點是DB In-Memory的開啓是在實例級別的,同時對於要存儲到In-memoryobjects需要手動指定,否則是不會自動存儲到In-Memory Area的。

    In-Memory AreaSGA中用列式存儲的方式來存儲數據的一個靜態池。在沒有這個特性之前,oracle的數據全部採用行形式進行存儲(除EHCC壓縮之外),而在In-Memory Area中數據以列式進行存儲,通過這種存儲方式在某些業務場景中提升掃描性能,如:出報表等。

    In-Memory Area的大小通過參數INMEMORY_SIZE來進行控制的,改參數默認爲0,表示DB In-Memory被禁用。

    數據庫當前正在使用的INMEMORY_SIZE參數可以通過v$parameter視圖進行查看,同時在v$sga視圖中也可以看到。In-Memory column存儲在一個靜態池當中,所以對於INMEMORY_SIZE參數的所有調整都只在該instance重啓之後纔會生效。同時In-Memory pool的大小也不會受到自動內存管理(AMM)的影響。如果啓用DB In-Memory特性,INMEMORY_SIZE最小需要設置爲100M

 

下面我們來看一下和In-Memory相關的參數:

SQL> show parameter INMEMORY

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

inmemory_clause_default              string

inmemory_force                       string      DEFAULT

inmemory_max_populate_servers        integer     0

inmemory_query                       string      ENABLE

inmemory_size                        big integer 0

inmemory_trickle_repopulate_servers_    integer     1

percent

optimizer_inmemory_aware             boolean     TRUE

    這7個含有INMEMORY前綴的參數分別控制着In-Memory功能的各個方面。比如INMEMORY_QUERY參數控制着在systemsession級別上用戶查詢是否可以使用列式存儲的數據。其他參數也會在之後的文章中一一介紹。

    在當前的參數設置中可以看到INMEMORY_SIZE參數被設置爲0,這代表着DB In-Memory功能未啓用,未在SGA中分配相關空間。

    我們同樣可以通過v$sga進行查看,In-Memory Area沒有被分配空間。

SQL> select name,value from v$sga;

 

NAME                      VALUE

-------------------- ----------

Fixed Size              2929160

Variable Size         469765624

Database Buffers     2600468480

Redo Buffers           13844480

 

開啓DB In-Memory過程如下:

1.修改INMEMORY_SIZE參數:

SQL> ALTER SYSTEM SET INMEMORY_SIZE=1G SCOPE=SPFILE;

 

System altered.

注意:INMEMORY_SIZE最小爲100M

2.檢查sga參數的設置,確保在設置完inmemroy_size參數之後數據庫實例還可以正常啓動。如果數據庫使用了ASMM,則需要檢查sga_target參數。如果使用了AMM,則需要檢查MEMORY_TARGET參數,同時也需要檢查SGA_MAX_TARGET(或MEMORY_MAX_TARGET)。

3.重啓數據庫實例

SQL> shutdown immediate;

SQL> startup 

4.檢查重啓後的數據庫參數設置:

SQL> show parameter INMEMORY_SIZE

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

inmemory_size                        big integer 1G

同時也可通過v$sga視圖查詢In-Memory Area的分配:

SQL> select name,value from v$sga;

 

NAME                      VALUE

-------------------- ----------

Fixed Size              2929160

Variable Size         469765624

Database Buffers     1526726656

Redo Buffers           13844480

In-Memory Area       1073741824

 

In-Memory Area中又被分爲兩個小的pool,分別爲:

1.1M poolIMCU pool

2.64KB poolSMU pool

具體分配的大小我們可以通過V$INMEMORY_AREA視圖進行查看:

SQL> select pool,alloc_bytes,used_bytes from v$inmemory_area;

 

POOL                       ALLOC_BYTES USED_BYTES

-------------------------- ----------- ----------

1MB POOL                     854589440          0

64KB POOL                    201326592          0

可以看到絕大部分的In-Memory Area被分配爲1MB pool。在沒有手工指定In-Memory的表時,USED_BYTES0

發佈了86 篇原創文章 · 獲贊 11 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章