1.概述
2014 年 6 月负饲,在 Oracle 12c 的 12.1.0.2 版本中矮烹,Oracle 正式發(fā)布和引入了基于內(nèi)存和列式計算的 In-Memory Option 組件 (以下簡稱 IMO)洲炊,IMO 組件主要包含 In-Memory Column Store
和 In-Memory Aggregation 兩大特性腋逆。在 IMO 中岳锁,數(shù)據(jù)在 SGA 共享內(nèi)存的獨立區(qū)域中按照列式進(jìn)行存儲圆米,數(shù)據(jù)是被壓縮存放的蒋畜,即數(shù)據(jù)庫中同時存在相同數(shù)據(jù)的行式及列式存儲声畏,該特性對應(yīng)用透明,可以極大的提升某些場景下的查詢性能姻成,本文檔針對 Oracle 12.1.0.2 的 IMO 組件進(jìn)行相關(guān)測試插龄,主要包括如下兩大方面:
- IMO 基礎(chǔ)功能測試
- IMO 效果測試
數(shù)據(jù)庫測試環(huán)境概要信息如下:
項目 | 內(nèi)容 | 項目 | 內(nèi)容 |
---|---|---|---|
主機(jī)名(node1) | memory247 | 硬件廠商 | IBM |
Public IP | 10.253.129.247 | 內(nèi)存 | 504G |
vip | 10.253.129.242 | CPU | 64C |
操作系統(tǒng) | Red hat 5.8 | 數(shù)據(jù)庫版本 | 12.0.1.2 |
主機(jī)名(node2) | memory248 | 硬件廠商 | IBM |
Public IP | 10.253.129.248 | 內(nèi)存 | 504G |
vip | 10.253.129.243 | CPU | 64C |
操作系統(tǒng) | Red hat 5.8 | 數(shù)據(jù)庫版本 | 12.0.1.2 |
2.IMO 基礎(chǔ)功能
2.1IMO 開啟與關(guān)閉
IMO 的開啟與關(guān)閉主要通過初始化參數(shù) INMEMORY_SIZE 進(jìn)行控制,當(dāng) INMEMORY_SIZE>0 時科展,IMO 開啟均牢,INMEMORY_SIZE=0 時 IMO 關(guān)閉,如果開啟 IMO才睹,該參數(shù)最小值設(shè)置為 100MB徘跪。同時該參數(shù)允許在 PDB 級別設(shè)置,否則將繼承 root PDB 設(shè)置的參數(shù)值琅攘,在非 root PDB 級別修改INMEMORY_SIZE 參數(shù)無需重啟實例或 PDB垮庐。
本測試環(huán)境在 root PDB 中設(shè)置 INMEMORY_SIZE 為 150GB 如下,所有 PDB 將繼承該參數(shù)值:
SQL>alter system set inmemory_size=150G scope=spfile;
另外坞琴,在配置了 IMO 的情況下哨查,也可以通過設(shè)置 INMEMORY_FORCE=OFF 的方式強制清空 SGA中 IN-MEMORY 內(nèi)存區(qū)域中的對象,即強制關(guān)閉 IMO 特性剧辐,該參數(shù)為動態(tài)參數(shù)寒亥,同時可以在 PDB 級別設(shè)置。
此外荧关,還可以通過在全局或會話級別設(shè)置 INMEMORY_QUERY=DISABLE 禁止 CBO 在查詢時考慮使用 IMO 特性溉奕,該參數(shù)為動態(tài)參數(shù),同時可以在 PDB 級別設(shè)置忍啤。
2.2IMO 初始化參數(shù)
SQL> select name,value,description from v$system_parameter where name like '%inmemory%';
NAME VALUE DESCRIPTION
------------------------------------------- ------------- ------------------------------------------------
inmemory_size 161061273600 size in bytes of in-memory area
inmemory_clause_default Default in-memory clause for new tables
inmemory_force DEFAULT Force tables to be in-memory or not
inmemory_query ENABLE Specifies whether in-memory queries are allowed
inmemory_max_populate_servers 32 maximum inmemory populate servers
inmemory_trickle_repopulate_servers_percent 1 inmemory trickle repopulate servers percent
optimizer_inmemory_aware TRUE optimizer in-memory columnar awareness
以上小節(jié)描述了與 IMO 開啟與關(guān)閉有關(guān)的三個參數(shù)加勤,本節(jié)將描述另外 4 個與 IMO 相關(guān)的參數(shù)。
- inmemory_clause_default:在 IMO 開啟的情況下檀轨,通過該參數(shù)設(shè)置新建表或物化視圖賦予的 INMEMORY 屬性胸竞,如:新建表或視圖是否直接設(shè)置 INMEMORY、INMEMORY 優(yōu)先級参萄、壓縮方法卫枝、RAC 環(huán)境中是否在所有節(jié)點實例中進(jìn)行 duplicate 保存等。
注:duplicate 屬性目前僅支持 Oracle Engineered System 讹挎,如 Oracle exadata校赤。因此在非 Oracle Engineered System RAC 環(huán)境中使用 IMO 會受到一些制約吆玖,同時嚴(yán)重影響 IMO 效果。
- inmemory_max_populate_servers:表或物化視圖載入內(nèi)存允許啟用的最大發(fā)布進(jìn)程數(shù)马篮。該參數(shù)缺省值為主機(jī)可用 cpu 數(shù)的一半與 PGA_AGGREGATE_TARGET/512M 比較,取較小值沾乘。
- inmemory_trickle_repopulate_servers_percen:當(dāng) IMCU 中臟數(shù)據(jù)達(dá)到一定閾值時觸發(fā) IMCU 向內(nèi)存重啟加載,重新加載過程中可以使用的最大發(fā)布進(jìn)程數(shù)浑测,該參數(shù)缺省值為 1翅阵。
- optimizer_inmemory_aware:用于控制 CBO 優(yōu)化器是否考慮 IN-MEMORY 特性帶來的執(zhí)行計劃改變,該參數(shù)默認(rèn)為 true迁央,在 SQL 執(zhí)行過程中優(yōu)化器會考慮 IN-MEMORY 特性掷匠。
2.3IMO 適用對象及優(yōu)先級
IMO 可以基于如下對象維度啟用:
- Table---全表級啟用
- Column---表中部分列級啟用
- Materialized view---物化視圖級啟用
- Tablespace---表空間級啟用
- Partition---分區(qū)表分區(qū)級啟用
注:SYS 用戶及 SYSTEM 和 SYSAUX 表空間對象、IOT 表岖圈、cluster table 不支持 IMO 特性讹语。
針對啟用了 IMO 的對象,會按照一定的優(yōu)先級進(jìn)入 SGA 中配置好的 IN-MEMORY 區(qū)域蜂科,同時顽决,在 IN-MEMORY 區(qū)域用滿后,依次置換出優(yōu)先級較低的對象导匣。下表為關(guān)于 IMO 對象優(yōu)先級說明:
優(yōu)先級 | 描述 |
---|---|
PRIORITY NONE | 缺省級別才菠;執(zhí)行 SQL 引起對象掃描后,觸發(fā)進(jìn)入 IN-MEMORY |
PRIORITY CRITICAL | 最高優(yōu)先級逐抑;數(shù)據(jù)庫啟動后立即進(jìn)入 IN-MEMORY |
PRIORITY HIGH | 在具有 CRITICAL 優(yōu)先級的對象之后進(jìn)入 IN-MEMORY |
PRIORITY MEDIUM | 在具有 CRITICAL鸠儿、HIGH 優(yōu)先級的對象之后進(jìn)入 IN-MEMORY |
PRIORITY LOW | 在具有 CRITICAL屹蚊、HIGH厕氨、MEDIUM 優(yōu)先級的對象之后進(jìn)入 IN-MEMORY |
IMO 適用對象測試
TABLE 級啟用:可以通過如下初始建表或后續(xù)修改表 inmemory 屬性的方式進(jìn)行啟用:
create table imo_t1 ( id number,name varchar2(100), type VARCHAR2(100)) inmemory;
或
alter table IMO_T2 inmemory;
SELECT table_name,inmemory FROM user_tables where table_name in ('IMO_T1','IMO_T2');
TABLE_NAME INMEMORY
-------------------- --------
IMO_T2 ENABLED
IMO_T1 ENABLED
COLUMN 級啟用:僅啟用表中某列前,該表必須先設(shè)置為 inmemory 模式:
SELECT table_name,inmemory FROM user_tables where table_name in ('IMO_T1','IMO_T2');
TABLE_NAME INMEMORY
-------------------- --------
IMO_T2 ENABLED
IMO_T1 ENABLED
alter table imo_t1 inmemory (id) no inmemory (name,type); alter table imo_t2 inmemory (name) no inmemory (id,type);
SELECT table_name, segment_column_id seg_col_id, column_name, inmemory_compression FROM v$im_column_level WHERE owner = 'IMOTEST' and table_name in ('IMO_T1','IMO_T2') ORDER BY 1,3;
TABLE_NAME SEG_COL_ID COLUMN_NAME INMEMORY_COMPRESSION
---------- ---------- --------------- -----------------------
IMO_T1 1 ID DEFAULT
IMO_T1 2 NAME NO INMEMORY
IMO_T1 3 TYPE NO INMEMORY
IMO_T2 1 ID NO INMEMORY
IMO_T2 2 NAME DEFAULT
IMO_T2 3 TYPE NO INMEMORY
物化視圖級啟用:可以通過如下初始創(chuàng)建物化視圖或后續(xù)修改物化視圖 inmemory 屬性的方式進(jìn)行啟用:
create materialized view imo_t1_mv inmemory as select * from imo_t1;
或
alter materialized view imo_t2_mv inmemory;
set linesize 1000
col table_name FORMAT A20
SELECT table_name,inmemory FROM user_tables where table_name in ('IMO_T1_MV','IMO_T2_MV');
TABLE_NAME INMEMORY
-------------------- --------
IMO_T2_MV ENABLED
IMO_T1_MV ENABLED
表空間級啟用:可以通過如下初始創(chuàng)建表空間或后續(xù)修改表空間 inmemory 屬性的方式進(jìn)行啟用汹粤,在屬性為 inmemory 的表空間中創(chuàng)建的對象自動加載 inmemory 屬性命斧,除非顯示設(shè)置對象為 no inmemory:
create tablespace imotest datafile '/u01/app/oracle/oradata/test12c/imotest01.dbf' size 100M default inmemory;
或
alter tablespace imotest default inmemory;
select tablespace_name, def_inmemory from dba_tablespaces where tablespace in ('IMOTEST');
TABLESPACE_NAME DEF_INMEMORY
------------------------------ ---------------
IMOTEST ENABLED
create table imo_t3 tablespace imotest as select * from imo_t1; create table imo_t4 tablespace imotest as select * from imo_t1;
SELECT table_name,
inmemory
FROM user_tables
WHERE table_name IN (
'IMO_T3',
'IMO_T4'
);
TABLE_NAME INMEMORY
-------------------- --------
IMO_T4 ENABLED
IMO_T3 ENABLED
ALTER TABLE imo_t3 no inmemory;
SELECT table_name,
inmemory
FROM user_tables
WHERE table_name IN (
'IMO_T3',
'IMO_T4'
);
TABLE_NAME INMEMORY
-------------------- --------
IMO_T4 ENABLED
IMO_T3 DISABLED
分區(qū)表分區(qū)級啟用:可以通過如下初始創(chuàng)建分區(qū)表或后續(xù)修改分區(qū) inmemory 屬性的方式進(jìn)行啟用:
CREATE TABLE imo_t5_part (
id number NOT NULL,
iddate DATE,
scn number
) tablespace users PARTITION BY range (id) (
PARTITION p_test_1 VALUES less than(20000) inmemory,
PARTITION p_test_2 VALUES less than(40000),
PARTITION p_test_3 VALUES less than(60000),
PARTITION p_test_4 VALUES less than(80000),
PARTITION p_test_5 VALUES less than(100000),
PARTITION p_test_6 VALUES less than(maxvalue)
);
或
alter table imo_t5_part modify partition P_TEST_1 inmemory;
SELECT table_name,
partition_name,
inmemory
FROM user_tab_partitions
WHERE table_name = 'IMO_T5_PRAT'
ORDER BY 2;
TABLE_NAME PARTITION_NAME INMEMORY
-------------------- -------------------- --------
IMO_T5_PART P_TEST_1 ENABLED
IMO_T5_PART P_TEST_2 DISABLED
IMO_T5_PART P_TEST_3 DISABLED
IMO_T5_PART P_TEST_4 DISABLED
IMO_T5_PART P_TEST_5 DISABLED
IMO_T5_PART P_TEST_6 DISABLED
IMO 對象優(yōu)先級測試
不指定優(yōu)先級缺省默認(rèn)級別為 none,同時需要通過執(zhí)行 SQL 引起對象掃描后嘱兼,觸發(fā)進(jìn)入 IN-MEMORY国葬。
alter table imo_t1 inmemory;
select table_name,inmemory,inmemory_priority from user_tables;
TABLE_NAME INMEMORY INMEMORY
-------------------- -------- --------
IMO_T1 ENABLED NONE
select segment_name, partition_name, segment_type, inmemory_priority from v$im_segments;
no rows selected
select count(*) from imo_t1;
select segment_name, partition_name, segment_type, inmemory_priority from v$im_segments;
SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE INMEMORY_PRIORITY
-------------------- --------------- ------------------ ------------------
IMO_T1 TABLE NONE
在 IN-MEMORY 空間充足的情況下,除 NONE 以外 CRITICAL芹壕、HIGH汇四、MEDIUM、LOW 優(yōu)先級會在數(shù)據(jù)庫啟動后或?qū)ο笤O(shè)置權(quán)限后自動進(jìn)入 IN-MEMORY:
select segment_name, partition_name, segment_type, inmemory_priority from v$im_segments order by 1;
SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE INMEMORY
-------------------- -------------------- ------------------ --------
IMO_T1 TABLE NONE
alter table imo_t2 inmemory priority critical;
alter table imo_t5_part modify partition P_TEST_1 inmemory priority high;
alter table imo_t4 inmemory priority medium; alter table imo_t1_mv inmemory priority low;
select segment_name, partition_name, segment_type, inmemory_priority from v$im_segments order by 1;
SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE INMEMORY
-------------------- --------------- --------------- --------
IMO_T1 TABLE NONE
IMO_T1_MV TABLE LOW
IMO_T2 TABLE CRITICAL
IMO_T4 TABLE MEDIUM
IMO_T5_PART P_TEST_1 TABLE PARTITION HIGH
2.4IMO 壓縮方式
Oracle 在 IMO 中的對象壓縮踢涌,使用新的壓縮算法通孽,只有結(jié)果集需要的數(shù)據(jù)才會進(jìn)行解壓(decompress)。即考慮節(jié)約空間睁壁,同時考慮性能的提升背苦。
針對 IMO 對象的壓縮可以分為如下 6 種方式,實際壓縮比取決于具體數(shù)據(jù)互捌。
壓縮方式 | 描述 |
---|---|
NO MEMCOMPRESS | IMO 中存儲無壓縮 |
MEMCOMPRESS FOR DML | 最小化壓縮,優(yōu)化 DML 操作 |
MEMCOMPRESS FOR QUERY LOW | 缺省方式:查詢性能最優(yōu)(best)行剂、空間壓縮效果好于 DML 方式 |
MEMCOMPRESS FOR QUERY HIGH | 查詢性能次優(yōu)(excellent)秕噪、空間壓縮效果好于 QUERY LOW |
MEMCOMPRESS FOR CAPACITY LOW | 查詢性能良好(good)、空間壓縮效果好于 QUERY HIGH |
MEMCOMPRESS FOR CAPACITY HIGH | CAPACITY 方式的缺省設(shè)置厚宰、空間壓縮效果最優(yōu) |
根據(jù)表中具體數(shù)據(jù)的不同壓縮比可以在 2X-20X 之間腌巾,如下 CUSTOMERS 表 12.6G 左右,不同壓縮方式測試過程和結(jié)果如下:
alter table CUSTOMERS inmemory priority high NO MEMCOMPRESS;
INST_ID SEGMENT_NAME INGB TBGB NOGB POPULATE_STATUS INMEMORY_COMPRESSION INMEMORY_DISTRIBUTE
---------- ------------ ---------- ---------- ---------- ------------------ -------------------- --------------------
1 CUSTOMERS 11.0810547 12.640625 0 COMPLETED NO MEMCOMPRESS AUTO
alter table CUSTOMERS inmemory priority high MEMCOMPRESS FOR DML;
INST_ID SEGMENT_NAME INGB TBGB NOGB POPULATE_STATUS INMEMORY_COMPRESSION INMEMORY_DISTRIBUTE
---------- ------------ ---------- ---------- ---------- ------------------ -------------------- -------------------
1 CUSTOMERS 11.0830078 12.640625 0 COMPLETED FOR DML AUTO
alter table CUSTOMERS inmemory priority high;
INST_ID SEGMENT_NAME INGB TBGB NOGB POPULATE_STATUS INMEMORY_COMPRESSION INMEMORY_DISTRIBUTE
---------- ---------- --------- ---------- ---------- ------------------ -------------------- ---------------------
1 CUSTOMERS 7.58148193 12.640625 0 COMPLETED FOR QUERY LOW AUTO
alter table CUSTOMERS inmemory priority high MEMCOMPRESS FOR QUERY HIGH;
INST_ID SEGMENT_NAME INGB TBGB NOGB POPULATE_STATUS INMEMORY_COMPRESSION NMEMORY_DISTRIBUTE
---------- ----------- ----------- ---------- ---------- ------------------ -------------------- ------------------
1 CUSTOMERS 5.637146 12.640625 0 COMPLETED FOR QUERY HIGH AUTO
alter table CUSTOMERS inmemory priority high MEMCOMPRESS FOR CAPACITY LOW;
INST_ID SEGMENT_NAME INGB TBGB NOGB POPULATE_STATUS INMEMORY_COMPRESSION INMEMORY_DISTRIBUTE
---------- ------------ ---------- ---------- ---------- ------------------ -------------------- -------------------
1 CUSTOMERS 4.07855225 12.640625 0 COMPLETED FOR CAPACITY LOW AUTO
壓縮方式 | 壓縮后大小 |
---|---|
NO MEMCOMPRESS | 11.08G |
MEMCOMPRESS FOR DML | 11.08G |
MEMCOMPRESS FOR QUERY LOW | 7.58G |
MEMCOMPRESS FOR QUERY HIGH | 5.63G |
MEMCOMPRESS FOR CAPACITY LOW | 4.07G |
MEMCOMPRESS FOR CAPACITY HIGH | 3.19G |
3.IMO 效果測試
本次測試環(huán)境為兩臺 PC Server 構(gòu)建的 RAC 環(huán)境铲觉,由于 RAC 環(huán)境中 IMO 的 duplicate 功能目前僅支持 Oracle Engineered System 壤躲,如 Oracle exadata,即使在非一體機(jī)環(huán)境設(shè)置了 duplicate
也無法生效备燃。因此在 RAC 環(huán)境中整體 IMO 性能提升程度受到嚴(yán)重影響碉克。
官方宣稱的 IMO 適用場景如下:
- 掃描大量數(shù)據(jù)行并通過=、<并齐、>或 IN 謂詞條件進(jìn)行過濾的查詢漏麦;
- 在一個具有較多字段的表中,僅查詢較少字段况褪,如表中擁有 100 個字段撕贞,查詢僅獲取 5個字段;
- 小表與大表的連接查詢测垛;
- 聚合查詢捏膨。
以下為以“聚合查詢”場景為例,描述 RAC 環(huán)境中 IMO 對象跨節(jié)點發(fā)布及單節(jié)點發(fā)布的性能表現(xiàn)食侮,其它三種適用場景通過測試表現(xiàn)基本一致号涯。
3.1跨節(jié)點發(fā)布
非exadata RAC 環(huán)境中 IMO 對象的發(fā)布會按照一定的規(guī)則將數(shù)據(jù)拆分平均發(fā)布到不同節(jié)點的IN-MEMORY 中。以測試中使用的 CUSTOMERS 表舉例如下:
INST_ID SEGMENT_NAME INMEMORY_SIZE BYTES BYTES_NOT_POPULATED INMEMORY_DISTRIBUTE POPULATE_STATUS
---------- ------------ ------------- ------------- ------------------- ------------------- ---------------
1 CUSTOMERS 4151181312 13572767744 6644211712 AUTO COMPLETED
2 CUSTOMERS 3989438464 13572767744 6907183104 AUTO COMPLETED
可以看到如上 CUSTOMERS 表拆分后被平均分布到兩個節(jié)點的 IN-MEMORY 中锯七。
INMEMORY_SIZE 表示壓縮后列式存儲在內(nèi)存中的大辛纯臁;
BYTES 字段表示 CUSTOMERS 表以傳統(tǒng)行式存儲的大小約 12.6G眉尸; BYTES_NOT_POPULATED 表示 CUSTOMERS 表在對應(yīng)實例沒有被發(fā)布到 IMO 中的部分域蜗。此時 CUSTOMERS 表已經(jīng)完成 IMO 發(fā)布,執(zhí)行如下 SQL 觀察效果:
alter system flush buffer_cache;---清空 buffer cache
select count(*) from customers t;
Elapsed: 00:00:41.85
Execution Plan
----------------------------------------------------------
Plan hash value: 296924608
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU) | Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 229K(1) | 00:00:09 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS INMEMORY FULL| CUSTOMERS | 100M | 229K(1) | 00:00:09 |
---------------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
4 recursive calls
0 db block gets
811101 consistent gets
811092 physical reads
0 redo size
542 bytes sent via SQL*Net to client
552 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
從以上執(zhí)行結(jié)果可以看到:執(zhí)行計劃雖然已經(jīng)變化 INMEMORY 中的全表掃描噪猾,但依然產(chǎn)生了大量的邏輯讀(811101)及物理讀(811092)霉祸,這種開銷對于 IMO 內(nèi)存掃描是不合理的。如下第二次執(zhí)行該 SQL袱蜡,我們看到物理讀消失丝蹭,但依然產(chǎn)生了與第一次執(zhí)行近似的邏輯讀(811093),這同樣是不合理的戒劫。
select count(*) from customers t;
Elapsed: 00:00:04.20
Execution Plan
----------------------------------------------------------
Plan hash value: 296924608
-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 229K (1)| 00:00:09 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS INMEMORY FULL| CUSTOMERS | 100M | 229K (1)| 00:00:09 |
-------------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
811093 consistent gets
0 physical reads
0 redo size
542 bytes sent via SQL*Net to client
552 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
進(jìn)一步通過設(shè)置如下兩個參數(shù)后半夷,再次執(zhí)行如上 SQL婆廊。
alter system set parallel_degree_policy=AUTO sid='*';-打開 oracle 自動并行設(shè)置 alter system set parallel_force_local=false sid='*';-設(shè)置并行進(jìn)程不允許跨節(jié)點執(zhí)行
alter system flush buffer_cache;---清空 buffer cache
select count(*) from customers t;
Execution Plan
----------------------------------------------------------
Plan hash value: 1221513835
-----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
TQ |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 25463 (1)| 00:00:01 | | | |
| 1 | SORT AGGREGATE | | 1 | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | |Q1,00 | P->S | QC (RAND) |
| 4 | SORT AGGREGATE | | 1 | | | |Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | | 100M| 25463 (1)| 00:00:01 |Q1,00 | PCWC | |
| 6 | TABLE ACCESS INMEMORY FULL| CUSTOMERS | 100M| 25463 (1)| 00:00:01 |Q1,00 | PCWP | |
---------------------------------------------------------------------------------------------------------
Note
-----
- automatic DOP: Computed Degree of Parallelism is 10
- parallel scans affinitized for inmemory
Statistics
----------------------------------------------------------
30 recursive calls
0 db block gets
7155 consistent gets
0 physical reads
0 redo size
542 bytes sent via SQL*Net to client
552 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
從以上執(zhí)行結(jié)果可以看到:即使清空 buffer cache 的情況下也沒有出現(xiàn)大量物理讀,同時執(zhí)行計劃中啟用了自動并行巫橄,并出現(xiàn)并行 inmemory 掃描淘邻,單次執(zhí)行邏輯讀從 811093 下降為 7155,呈幾何級下降湘换。
未完待續(xù)