SQL> create table t1
2 as
3 select mod(level, 100 ) as c1
4 from dual
5 connect by level <= 100000 ;
테이블이 생성되었습니다.
SQL>
SQL> -- OPTIMIZER_INDEX_COST_ADJ 파라미터의 값을 10000, 100, 50, 1 로 변경하면서 동일한 SQL 문장을 수행합니다
SQL>
SQL> alter session set optimizer_index_cost_adj = 10000 ;
세션이 변경되었습니다.
SQL>
SQL> select count (*) from t1 where c1 = 1;
COUNT(*)
----------
1000
SQL>
SQL> alter session set optimizer_index_cost_adj = 100;
세션이 변경되었습니다.
SQL>
SQL> select count (*) from t1 where c1 = 1;
COUNT(*)
----------
1000
SQL>
SQL> alter session set optimizer_index_cost_adj = 50;
세션이 변경되었습니다.
SQL>
SQL> select count (*) from t1 where c1 = 1;
COUNT(*)
----------
1000
SQL>
SQL> alter session set optimizer_index_cost_adj = 1;
세션이 변경되었습니다.
SQL>
SQL> select count (*) from t1 where c1 = 1;
COUNT(*)
----------
1000
SQL>
SQL> -- 직전 SQL_ID 확인
SQL> col prev_sql_id new_value sql_id
SQL> select prev_sql_id from v$session where sid = userenv('sid');
PREV_SQL_ID
-------------
58ccx36sbcnw2
SQL>
SQL> -- SQL_ID로 SQL문장과 해당정보를 확인
SQL> select sql_id,
2 version_count,
3 substr(sql_text, 1, 40) as sql_text
4 from v$sqlarea
5 where sql_id = '&sql_id';
구 5: where sql_id = '&sql_id'
신 5: where sql_id = '58ccx36sbcnw2'
SQL_ID VERSION_COUNT SQL_TEXT
------------- ------------- --------------------------------------------------------------------------------
58ccx36sbcnw2 4 select count (*) from t1 where c1 = 1
SQL>
SQL>
SQL> -- VERSION_COUNT = 4 (동일한 SQL 문에 대해 4개의 버전이 있음을 의미)
SQL> -- v$sql을 통해 차일드 커서를 확인할 수 있으며 특정파라미터값을 추적할 수 있음.
SQL>
SQL> select s.sql_id,
2 s.child_number,
3 (select value
4 from v$sql_optimizer_env e
5 where e.sql_id = s.sql_id
6 and e.child_number = s.child_number
7 and e.name = 'optimizer_index_cost_adj') as oica,
8 substr(s.sql_text, 1, 40) as sql_text,
9 plan_hash_value
10 from v$sql s
11 where s.sql_id = '&sql_id';
구 11: where s.sql_id = '&sql_id'
신 11: where s.sql_id = '58ccx36sbcnw2'
SQL_ID CHILD_NUMBER OICA SQL_TEXT
------------- ------------ -------- -------------------------------------
58ccx36sbcnw2 0 10000 select count (*) from t1 where c1 = 1
58ccx36sbcnw2 1 100 select count (*) from t1 where c1 = 1
58ccx36sbcnw2 2 50 select count (*) from t1 where c1 = 1
58ccx36sbcnw2 3 1 select count (*) from t1 where c1 = 1
=========================================================================
SQL 커서의 구조에 기반해서 성능 문제를 분석하는 방법 소개
- 강좌 URL : http://www.gurubee.net/lecture/4293
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.