메뉴 건너뛰기

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 4. Prefetch file balto 2010.07.10 28434
65 5. 오라클 Lock file 휘휘 2010.06.07 26365
64 2. DB 버퍼 캐시 file 휘휘 2010.05.24 21916
63 3. SQL 트레이스 file balto 2010.06.06 21175
62 1. 기본 아키텍처 [1] file 휘휘 2010.05.23 19899
61 2. 트랜잭션 수준 읽기 일관성 file 휘휘 2010.06.07 19567
60 5. Undo file 토시리 2010.05.31 18650
59 11. Shared Pool file 실천하자 2010.05.31 18511
58 9. Static vs. Dynamic SQL [1] balto 2010.07.04 18343
57 4. Array Processing 활용 file 휘휘 2010.07.05 18238
56 1 장. 오라클 아키텍처 운영자 2010.05.20 17842
55 5. Fetch Call 최소화 file 휘휘 2010.07.05 16839
54 9. ASH(Active Session History) 실천하자 2010.06.14 15607
53 2. SQL 처리과정 file 휘휘 2010.06.28 15340
52 3. 버퍼 Lock [1] 휘휘 2010.05.24 15225
51 6. 바인드 변수의 부작용과 해법 file 실천하자 2010.06.28 14664
50 1. Explain Plan 실천하자 2010.06.06 14663
49 8. PL/SQL 함수 호출 부하 해소 방안 토시리 2010.07.11 14023
48 7. Result 캐시 휘휘 2010.07.19 12969