오라클 성능 트러블슈팅의 기초 (2012년)
부모커서와 차일드 커서 0 0 39,130

by 구루비스터디 SQL 분석 X$KGLOB [2023.09.06]


부모커서와 차일드 커서

  • 하나의 부모 커서와 하나 이상의 차일드 커서로 구성됨을 확인

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 커서의 구조에 기반해서 성능 문제를 분석하는 방법 소개

  • 부모 커서와 차일드 커서를 분석하는 방법
  • X$KGLOB 테 이블을 사용하는 방법
  • 가짜 커서를 분석하는 방법
"데이터베이스 스터디모임" 에서 2012년에 "오라클 성능 트러블슈팅의 기초 " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4293

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입