SQL性能改善めも

オプティマイザのパラメータ確認

 

select * from V$SYS_OPTIMIZER_ENV;
select * from V$SES_OPTIMIZER_ENV:

 

オプティマイザヒント確認

 

select * from v$sql_hint;

 

●各オブジェクトのSELECTIVITY確認

 

セレクティビティ(選択率) = 条件を適用した結果の行数 / 全体の行数
カーディナリティ = 表の行数 × セレクティビティ

 

select count(distinct 列名1), count(distinct 列名2), … count(distinct 列名N)
from 対象表名

 

●plan_tableの作成

 

@$ORACLE_HOME/rdbms/admin/catplan.sql

 

●実行計画の生成

 

explain plan for SQL

 

●実行計画確認

 

auto trace
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());
select plan_table_output from table(dbms_xplan.display_plan(format=>'ALL'));
select * from v$sql_plan;
@?/rdbms/admin/UTLXPLS.SQL --シングル用
@?/rdbms/admin/UTLXPLP.SQL --パラレル用

 

●PLAN_TABLE別名

 

CREATE OR REPLACE PUBLIC SYNONYM my_plan_table for plan_table$

 

SQL文確認

 

select * from v$sqltext;

 

SQLによる確認

 

select * from v$sql;
select * from v$sqlarea;

 

SQL実測確認

 

set pages 50000
set lines 30000
set trimspool on
set timing on
set time on
set autot on
spool <スプールファイル名>
<対象SQL実行>
spool off

 

●実行中のSQL確認

 

col sid for 99999
col serial# for 99999
col sql_text for a64
select s.sid,s.serial#,t.sql_text from v$session s,v$sqltext t where s.sql_id=t.sql_id and s.status = 'ACTIVE' order by 1,2,t.piece;

 

●実行中のSQL確認(RAC、マルチテナント版)

 

col sid-s# for a10
col i.c for a3
col sql_text for a64
select s.inst_id||'.'||s.con_id as "i.c",s.sid||','||s.serial# as "sid-s#",t.sql_text from gv$session s,gv$sqltext t where s.sql_id=t.sql_id and s.status = 'ACTIVE' order by 1,2,t.piece;