Call의 발생 위치에 따른 구분
- User call: DBMS 외부에서 요청되는 call 을 의미한다. DBMS성능과 확장성을 높이려면 user call을 최소화하려는 노력이 중요하다.
- Recursive call: DBMS 내부에서 요청되는 Call을 의미한다. 데이터 딕셔너리 조회, 사용자 정의 함수/ 프로시저 내의 SQL 수행 등이 해당된다. 바인드 변수를 적극적으로 활용하여 하드 파싱의 발생횟수를 줄이면 최소화 된다.
커서의 종류
1)공유 커서
SQL을 하드 파싱한 결과를 저장하고 있다. 라이브러리 캐시에 저장되어 있는 커서이며, 여러 세션간의 공유 가 가능하다.
데이터를 저장하고 있는 공간으로 SQL 수행 시에는 커서를 읽은 다음 PGA 에 올려야 한다.
2)세선 커서
다른 세션과 공유하지 않는다. 대신 세션 커서를 소유하고 있는 서버 프로세스와 연결된 세션에서 SQL를 실행할 수 있다. 공유커서 하나를 여러 세션 커서가 연결될 수 있다. 공유커서가 PGA 에 올려야 세션 커서가 된다.
3)어플리케이션 커서
오라클에서 관리하는 커서가 아닌 어플리케이션에서 생성한 커서이다. 커서의 위치를 저장하고 있다(포인커를 이용해 커서위치를 가르킬 수 있다). 오라클의 세션 커서를 참조하기 위해 사용된다. 공유 커서가 메모리에 밀어나지 않은 상태에서 동일 쿼리를 여러번 실행하는 것이 가능하다. parse call 은 커서 열 때 수행되기 때문에, parse call 수행 횟수를 줄여준다.
parse call 의 수행은 '어플리케이션 커서' 에서만 줄일 수 있다.
SQl 커서에 대한 작업 요청에 따른 종류
1) parse call : 커서를 파싱하는 과정에 대한 통계, 실행 계획을 생성하거나 찾느 과정에 대한 정보를 포함한다.
2) execute call : 커서를 실행하는 단계에 대한 통계
3)fetch call : select 문에서 실제 레코드를 읽어서 사용자가 요구한 결과집합을 반환하는 과정의 통계
※ insert, update,delete, merge 등 구문은 execute 시점에서 모든 처리과정을 완료하므로 fetch call 이 발생하지 않는다.
실습)
#scott 계정에서 sql_alter 조건을 'true' 로 설정한다
alter session set sql_trace = true;
#scott 계정에서 emp 테이블의 모든 사원의 정보를 조회한다
select * from emp;
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK 7902 80/12/17 800
20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300
30
7521 WARD SALESMAN 7698 81/02/22 1250 500
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7566 JONES MANAGER 7839 81/04/02 2975
20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400
30
7698 BLAKE MANAGER 7839 81/05/01 2850
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7782 CLARK MANAGER 7839 81/06/09 2450
10
7788 SCOTT ANALYST 7566 87/04/19 3000
20
7839 KING PRESIDENT 81/11/17 5000
10
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7844 TURNER SALESMAN 7698 81/09/08 1500 0
30
7876 ADAMS CLERK 7788 87/05/23 1100
20
7900 JAMES CLERK 7698 81/12/03 950
30
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7902 FORD ANALYST 7566 81/12/03 3000
20
7934 MILLER CLERK 7782 82/01/23 1300
10
14 개의 행이 선택되었습니다.
아래의 스크립트를 이용해서 가장 최근에 생성된 트레이스 파일의 위치를 조회한다.
SQL> SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';
VALUE
--------------------------------------------------------------------------------
c:\oracle\diag\rdbms\orcl\orcl\trace\orcl_ora_16576.trc
SQL> SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';
VALUE
--------------------------------------------------------------------------------
c:\oracle\diag\rdbms\orcl\orcl\trace
##해당 trace 파일은 call 통계량이 기록된 것
'SQLP' 카테고리의 다른 글
[SQLP] 쿼리 변환2 (0) | 2024.08.20 |
---|---|
[SQLP] 쿼리 변환 (0) | 2024.08.19 |
[SQLP] 테이블 스페이스 (0) | 2024.08.15 |
[SQLP] 커서 공유 (0) | 2024.08.15 |
[SQLP]바인딩 변수 (0) | 2024.08.14 |