SQLP

[SQLP] 데이터베이스 call 과 네트워크 부하 ★★★★★

songsua 2024. 8. 17. 16:29

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