Oracle12c IMO 測試

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)測試插龄,主要包括如下兩大方面:

  1. IMO 基礎(chǔ)功能測試
  2. 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 適用場景如下:

  1. 掃描大量數(shù)據(jù)行并通過=、<并齐、>或 IN 謂詞條件進(jìn)行過濾的查詢漏麦;
  2. 在一個具有較多字段的表中,僅查詢較少字段况褪,如表中擁有 100 個字段撕贞,查詢僅獲取 5個字段;
  3. 小表與大表的連接查詢测垛;
  4. 聚合查詢捏膨。

以下為以“聚合查詢”場景為例,描述 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ù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宾舅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子彩倚,更是在濱河造成了極大的恐慌筹我,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帆离,死亡現(xiàn)場離奇詭異蔬蕊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哥谷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門岸夯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人们妥,你說我怎么就攤上這事猜扮。” “怎么了监婶?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵旅赢,是天一觀的道長。 經(jīng)常有香客問我惑惶,道長煮盼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任集惋,我火速辦了婚禮孕似,結(jié)果婚禮上窖梁,老公的妹妹穿的比我還像新娘药有。我一直安慰自己魁袜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布雷绢。 她就那樣靜靜地躺著,像睡著了一般理卑。 火紅的嫁衣襯著肌膚如雪翘紊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天藐唠,我揣著相機(jī)與錄音帆疟,去河邊找鬼鹉究。 笑死,一個胖子當(dāng)著我的面吹牛踪宠,可吹牛的內(nèi)容都是我干的自赔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼柳琢,長吁一口氣:“原來是場噩夢啊……” “哼绍妨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柬脸,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤他去,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倒堕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灾测,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年垦巴,在試婚紗的時候發(fā)現(xiàn)自己被綠了行施。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡魂那,死狀恐怖蛾号,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涯雅,我是刑警寧澤鲜结,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站活逆,受9級特大地震影響精刷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔗候,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一怒允、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锈遥,春花似錦纫事、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至爬立,卻和暖如春钾唬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工抡秆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留奕巍,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓儒士,卻偏偏與公主長得像的止,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乍桂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容