您好,登錄后才能下訂單哦!
Oracle 12C 新特性 In-Memory
In-Memory 是12C 開始,在 SGA 中新增加的內(nèi)存區(qū)域,可以實現(xiàn)表數(shù)據(jù)按列存儲;
In-Memory 并沒有取代傳統(tǒng)的Buffer Cache ,二者并存在 SGA 中。
SGA是動態(tài)區(qū)域,In-Memory大小是靜態(tài)的,需要DBA手動維護。
列式存儲數(shù)據(jù)和行式存儲數(shù)據(jù)各有優(yōu)缺點,適用場景不同。
列式存儲在訪問多行、少列情況下性能更優(yōu)。
下面啟用 inmemory , 進行性能測試。
一 數(shù)據(jù)庫版本為19C( 相當于 12.2.0.3 版本 )
SQL> select banner_full from v$version;
BANNER_FULL
---------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
二 查看 inmemory 是否啟用
SQL> show parameter inmemory_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
inmemory_size big integer 0
三 創(chuàng)建測試數(shù)據(jù)
SQL> conn cjc/cjc@cjcpdb
SQL> create table t1 as select * from dba_objects;
SQL> select count(*) from t1;
COUNT(*)
----------
72482
四 啟用 in - memory ( 實例級別 )
SQL> show parameter inmemory_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
inmemory_size big integer 0
SQL> alter system set inmemory_size=300M scope=spfile;
SQL> shutdown immediate
SQL> startup
ORACLE instance started.
Total System Global Area 1287650440 bytes
Fixed Size 9145480 bytes
Variable Size 759169024 bytes
Database Buffers 201326592 bytes
Redo Buffers 3436544 bytes
In-Memory Area 314572800 bytes
Database mounted.
Database opened.
SQL> show parameter inmemory_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
inmemory_size big integer 300M
五 性能對比
5.1 收集 T1 表統(tǒng)計信息
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('CJC','T1',estimate_percent=>100,CASCADE=> TRUE);
PL/SQL procedure successfully completed.
查看執(zhí)行計劃
SQL> set autotrace on
5.2 對表 t1 啟用 inmemory
SQL> conn sys/oracle@cjcpdb as sysdba
Connected.
SQL> alter table cjc.t1 inmemory;
--- 禁用 alter table cjc.t1 no inmemory;
5.3 收集統(tǒng)計信息
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('CJC','T1',estimate_percent=>100,CASCADE=> TRUE);
5.4 查看執(zhí)行計劃
SQL> set autotrace on
SQL> select count(object_id) from t1;
COUNT(OBJECT_ID)
----------------
72481
T1 表啟用 inmemory 后 ,consistent gets 由 1412 降到 2 , Cost 由 392 降到 16 ,性能提升比較明顯。
六 查詢相關(guān)信息
--- V$INMEMORY_AREA 、 V$IM_SEGMENTS 、V$IM_COLUMN_LEVEL
SELECT NAME, VALUE / (1024 * 1024 * 1024) "SIZE_IN_GB"
FROM V$SGA
WHERE NAME LIKE '%Mem%';
SELECT POOL ,
TRUNC ( ALLOC_BYTES / ( 1024 * 1024 * 1024 ), 2 ) "ALLOC_GB" ,
TRUNC ( USED_BYTES / ( 1024 * 1024 * 1024 ), 2 ) "USED_GB" ,
POPULATE_STATUS
FROM V$INMEMORY_AREA ;
SELECT OWNER ,
SEGMENT_NAME ,
bytes ,
INMEMORY_SIZE ,
POPULATE_STATUS ,
BYTES_NOT_POPULATED
FROM V$IM_SEGMENTS ;
SELECT table_name,
segment_column_id,
column_name,
inmemory_compression
FROM v$im_column_level;
七 注意事項
1 inmemory_size 不能小于 100M
SQL> startup
ORA-64353: in-memory area size cannot be less than 100MB
2 指定表在啟用或禁用 inmemory 時,要及時收集統(tǒng)計信息
否則執(zhí)行計劃里的信息是不準確的。
詳細信息可以參考官方文檔
https://docs.oracle.com/en/database/oracle/oracle-database/19/inmem/intro-to-in-memory-column-store.html#GUID-BFA53515-7643-41E5-A296-654AB4A9F9E7
歡迎關(guān)注我的微信公眾號"IT小Chen",共同學習,共同成長?。?!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。