메뉴 건너뛰기

bysql.net

4. 커서 공유

2010.06.28 00:17

balto 조회 수:9200

커서의 개념 -다음 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) 조건절 값 비교(가장 문제되는 경우)


번호 제목 글쓴이 날짜 조회 수
27 9. ASH(Active Session History) 실천하자 2010.06.14 15607
26 8. Statspack / AWR balto 2010.06.13 12767
25 7. Response Time Analysis 방법론과 OWI file balto 2010.06.13 8066
24 5. 오라클 Lock file 휘휘 2010.06.07 26368
23 4. 동시성 구현 사례 토시리 2010.06.07 10939
22 3. 비관적 vs. 낙관적 동시성 제어 휘휘 2010.06.07 8210
21 2. 트랜잭션 수준 읽기 일관성 file 휘휘 2010.06.07 19568
20 4. DBMS_XPLAN 패키지 balto 2010.06.06 10461
19 3. SQL 트레이스 file balto 2010.06.06 21175
18 3장. 오라클 성능 관리 운영자 2010.06.06 6697
17 2. AutoTrace 실천하자 2010.06.06 8597
16 1. Explain Plan 실천하자 2010.06.06 14663
15 2장. 트랜잭션과 Lock 운영자 2010.06.01 6895
14 6. 문장수준 읽기 일관성 file 토시리 2010.06.01 10432
13 1. 트랜잭션 동시성 제어 실천하자 2010.05.31 8631
12 5. Undo file 토시리 2010.05.31 18653
11 11. Shared Pool file 실천하자 2010.05.31 18511
10 8. 블록 클린아웃 휘휘 2010.05.31 12283
9 7. Consistent vs. Current 모드 읽기 휘휘 2010.05.31 10537
8 10. 대기 이벤트 balto 2010.05.30 8011