메뉴 건너뛰기

bysql.net

4. 커서 공유

2010.06.28 00:17

balto 조회 수:9199

커서의 개념 -다음 3가지를 말한다.

(1) 공유 커서(shared cursor) : 라이브러리 캐시에 공유되어 있는 Shared SQL Area

- JAVA, VB, Pro*C, PL/SQL에서 SQL을 실행하면 라이브러리 캐시에 SQL을 만들어 공유한다. 라이브러리 캐시에 공유된 Shared SQL Area를 ‘커서’라고 한다.

(2) 세션 커서(session cursor) : Private SQL Area에 저장된 커서

- 라이브러리 캐시에 공유된 커서를 실행할 때는 PGA 영역에 메모리 할당(Private SQL Area=Persistent Area+Runtime Area). PGA에 저장된 커서 정보를 ‘커서’라고 부른다.

- 라이브러리에 공유된 커서는 클래스상태이고, new Cursor()을 실행하면 PGA에 인스턴수가 생긴다.

(3) 애플리케이션 커서(application cursor) : 세션 커서를 가리키는 핸들

- PGA에 있는 커서를 핸들링하려면 JAVA, VB, Pro*C, PL/SQL에 리소스를 할당해야하는데 이 때 ‘커서’라는 용어를 사용한다.

fig4-7.jpg



커서 공유

- 라이브러리 캐시의 공유 커서를 말한다.

- 라이브러리 캐시에 공유되 있는 커서의 수행 통계 보는 방법

(실험) v$sql - 같은 SQL 문을 3번 실행하면 parse_call이 3번으로 증가(p260 참고)

SQL_ID

PARSE_CALLS

(요청 횟수)

LOADS(하드 파싱 후 적재 횟수)

EXECUTIONS

(SQL 실행 횟수)

INVALIDATIONS(커서가 무효화된 횟수)

RELOADS

f4rftk2rh90dv

3

1

3

0

0

- 다른 세션에서 같은 SQL 문을 실행하면 커서재사용(PARSE_CALLS=PARSE_CALLS+1)

- 커서의 킷값은 sql 문 텍스트 그 자체이므로 공백만 추가되도 다른 sql 문으로 인식한다.

Child 커서를 공유하지 못하는 경우

- SQL 문이 동일해도 별도의 SQL 커서를 생성해야할 경우도 있다.

예) 테이블 이름은 같지만 다른 스키마일 경우

- SQL 마다 1개의 부모 커서를 갖고, 기본적으로 1개의 자식커서를 갖는다.

- SQL 하나당 여러개의 child 커서를 갖는 것은 바람직하지 않다.

예) 고객사 마다 별도의 사용자 계정을 갖는 경우 같은 sql 문을 작성하면 child 수 증가.

- 하나의 sql 문장이 여러 개의 sql 커서를 갖는 이유

(1) 오브젝트 이름이 같지만 실제로는 다른 오브젝트일 경우

(2) 참조 오브젝트가 무효가 되었지만 아직 기존 세션이 사용중일 때

(3) 옵티마이저 관련 파라메터가 다를 경우

(4) 입력된 바인드 값의 길이가 다를 때

(5) NLS 파라메터를 다르게 설정했을 때

(6) SQL 트레이스를 활성화 했을 때

Parent 커서를 공유하지 못하는 경우 : SQL 문이 의미는 같지만 킷값이 다른 경우

(1) SQL 문에 공백문자 또는 줄바꿈이 있을 때

(2) 대소문자

(3) 테이블 소유자 명시

(4) 주석

(5) 옵티마이저 힌트

(6) 조건절 값 비교(가장 문제되는 경우)


번호 제목 글쓴이 날짜 조회 수
67 Front Page file 운영자 2010.05.17 154865
66 1 장. 오라클 아키텍처 운영자 2010.05.20 17842
65 1. 기본 아키텍처 [1] file 휘휘 2010.05.23 19899
64 3. 버퍼 Lock [1] 휘휘 2010.05.24 15225
63 2. DB 버퍼 캐시 file 휘휘 2010.05.24 21916
62 4. Redo file 휘휘 2010.05.24 11314
61 9. Snapshot too old balto 2010.05.30 8100
60 10. 대기 이벤트 balto 2010.05.30 8010
59 7. Consistent vs. Current 모드 읽기 휘휘 2010.05.31 10537
58 8. 블록 클린아웃 휘휘 2010.05.31 12283
57 11. Shared Pool file 실천하자 2010.05.31 18511
56 5. Undo file 토시리 2010.05.31 18652
55 1. 트랜잭션 동시성 제어 실천하자 2010.05.31 8631
54 6. 문장수준 읽기 일관성 file 토시리 2010.06.01 10432
53 2장. 트랜잭션과 Lock 운영자 2010.06.01 6895
52 1. Explain Plan 실천하자 2010.06.06 14663
51 2. AutoTrace 실천하자 2010.06.06 8597
50 3장. 오라클 성능 관리 운영자 2010.06.06 6694
49 3. SQL 트레이스 file balto 2010.06.06 21175
48 4. DBMS_XPLAN 패키지 balto 2010.06.06 10461