set trimspool on set trim on set pages 0 set linesize 1000 set long 1000000 set longchunksize 1000000 spool sqlmon_active.html select dbms_sqltune.report_sql_monitor(sql_id=>'SQL_ID', type=>'active') from dual; -- ★typeはACTIVE(HTML) or TEXTを指定 spool off
select /*+ MONITOR */ COL1 from TBL1
select /*+ NO_MONITOR */ COL1 from TBL1
select dbms_sqltune.report_sql_monitor_list(sql_id=>'SQL_ID', type=>'TEXT') from dual;
select dbms_sqltune.report_sql_monitor(sql_id=>'SQL_ID', sql_exec_id=>'上記で取得したID', type=>'active') from dual;
SWAP_JOIN_INPUTS(表別名)
NO_SWAP_JOIN_INPUTS(表別名)
create table TEST_1(ID NUMBER, STATUS CHAR(1)); create table TEST_2(ID NUMBER);
select /*+ use_hash(t1, t2) swap_join_inputs(t2) */ t1.id from TEST_1 t1 left join TEST_2 t2 on t1.ID = t2.ID where t1.STATUS = '0' and t2.ID is not null or t1.STATUS = '1' and t2.ID is null ;
Plan hash value: 1517313122 --------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 82 | 2378 | 4 (0)| 00:00:01 | |* 1 | FILTER | | | | | | |* 2 | HASH JOIN RIGHT OUTER| | 82 | 2378 | 4 (0)| 00:00:01 | | 3 | TABLE ACCESS FULL | TEST_2 | 82 | 1066 | 2 (0)| 00:00:01 | | 4 | TABLE ACCESS FULL | TEST_1 | 82 | 1312 | 2 (0)| 00:00:01 | --------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("T1"."STATUS"='0' AND "T2"."ID" IS NOT NULL OR "T1"."STATUS"='1' AND "T2"."ID" IS NULL) 2 - access("T1"."ID"="T2"."ID"(+))
------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 4 | 1 (0)| 00:00:01 | |* 1 | INDEX RANGE SCAN| TEST2_IX1 | 1 | 4 | 1 (0)| 00:00:01 | ------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("NUM"=1) # ★アクセス述語
操作 | オプション | 操作の内容 | マニュアルに記載されたバージョン |
INDEX | UNIQUE SCAN | B-Tree 索引 からユニークキーを使用して1つの ROWID を取得する | 8.0 以前 |
RANGE SCAN | 索引から範囲(スタート・キー、ストップ・キー)をキーにして1または複数 ROWID の取得 | ||
RANGE SCAN DESCENDING | INDEX RANGE SCAN を索引値の降順にスキャン | ||
FULL SCAN | 索引からのすべての ROWID の取得。遅い(テーブルフルスキャンよりマシ)。利点は、INDEXの順にアクセスするので、ソート済みの状態でデータが取得できる | Oracle 9i Release2 | |
FULL SCAN DESCENDING | INDEX FULL SCAN を索引の降順で行なう | ||
FAST FULL SCAN | INDEX FULL SCAN の高速版:マルチブロック読み込みを使用するため取得順番は不定。インデックスに全カラムが含まれている場合 TABLE FULL SCAN と同じ意味になる(※ つまり ROWID だけでなくカラム値も取得する) | Oracle 9i Release2 CBO のみ | |
SKIP SCAN | INDEX SKIP SCAN を使用した ROWID の取得 |
WHERE (A).ID = 1 AND (B).ID = 100
WHERE (A).ID = (B).ID
select * from table(DBMS_XPLAN.DISPLAY_AWR('<SQL_ID>',null,null,'ALL'));
Elapsed Elapsed Time Time (s) Executions per Exec (s) %Total %CPU %IO SQL Id ---------------- -------------- ------------- ------ ------ ------ ------------- 43,399.6 18,049 2.40 19.4 .9 .0 6qb74qdmz6jxw Module: JDBC Thin Client SELECT MY_ID FROM MY_TABLE WHERE MY_ID IN ( 以下略
EXPLAIN PLAN FOR <実行計画を取得したSQLテキスト>;
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY())
VAR B1 NUMBER; EXEC :B1 := 10000; SET AUTOTRACE TRACEONLY; SELECT * FROM TBL_A WHERE C1 <= :B1;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('<SQL_ID>', NULL, 'ALL'));
-- RACの場合はsid='*'で両ノード一度に変更可能 alter system set optimizer_index_caching=90 scope=both sid='*'; alter system set optimizer_index_cost_adj=10 scope=both sid='*';