Slide 15
Slide 15 text
【12c】遅延カーソル無効化(DDL deferred invalidation)
• 12cR2~ではDDLに対して即時に共有カーソルの無効化をせず、可能なものは無効化を回避し、
避けられないものはローリング無効化をすることができるようになった
例)alter table xxx truncate partition yyy update global indexes deferred invalidation
15
12c update
◆検証内容
• レンジパーティション+ローカル/グローバル索引のsales表に対しSQLを実行(フルスキャン・索引レンジスキャン)
• パーティショントランケートをdeferred invalidationオプションあり・なしで確認(update global indexesあり)
• v$sqlのinvalidation(無効化された回数)、last_load_time(前回ハードパースの時刻)に着目
CREATE TABLE scott.sales
( prod_id NUMBER(6)
, cust_id NUMBER
, time_id DATE
, channel_id CHAR(1)
, promo_id NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('20060401','YYYYMMDD'))
, PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('20060701','YYYYMMDD'))
, PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('20061001','YYYYMMDD'))
, PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('20061201','YYYYMMDD'))
);
insert into scott.sales values(1,1,to_date('20060101','YYYYMMDD'),'1',1,1,1);
insert into scott.sales values(2,1,to_date('20060401','YYYYMMDD'),'1',1,1,1);
insert into scott.sales values(3,1,to_date('20060701','YYYYMMDD'),'1',1,1,1);
insert into scott.sales values(4,1,to_date('20061001','YYYYMMDD'),'1',1,1,1);
commit;
create index scott.amount_sold_ix on scott.sales(amount_sold);
create index scott.prod_id_ix on scott.sales(prod_id) local;
SQL> select /* trunctest01 */ * from scott.sales;
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 328 | 25256 | 2
| 1 | PARTITION RANGE ALL | | 328 | 25256 | 2
| 2 | TABLE ACCESS STORAGE FULL| SALES | 328 | 25256 | 2
--------------------------------------------------------------------
SQL> select /* trunctest01 */ * from scott.sales where prod_id>0;
--------------------------------------------------------------------
| Id | Operation | Name | Ro
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | PARTITION RANGE ALL | |
| 2 | TABLE ACCESS BY LOCAL INDEX ROWID BATCHED| SALES |
|* 3 | INDEX RANGE SCAN | PROD_ID_IX |
--------------------------------------------------------------------
SQL> select /* trunctest01 */ * from scott.sales where amount_sold>0
--------------------------------------------------------------------
| Id | Operation | Name
--------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 1 | TABLE ACCESS BY GLOBAL INDEX ROWID BATCHED| SALES
|* 2 | INDEX RANGE SCAN | AMOUNT_SOLD_IX
--------------------------------------------------------------------
ローカル索引
グローバル索引