*공유 커서(Shared cursor)
- 공유 커서(Shared Cursor)는 SQL문과 PL/SQL문을 의미하며, 동일한 SQL문과 PL/SQL은 여러 사용자에 의해 공유되어 사용된다.
커서가 공유되면 새로운 오브젝트 핸들과 힙 오브젝트를 생성하는 과정이 생략되므로 커서 수행 속도가 향상되며, 메모리 단편화
방지 등 자원의 효율적인 사용이 가능해진다.
- 바인드 변수를 사용한 SQL들은 변수 값이 달라지더라도 오라클이 바인드 변수 치환을 통해서 동일한 SQL로 인식하므로 부모 커
서와 자식 커서를 모두 공유한다. 하지만 바인드 변수를 사용하지 않는 SQL은 상수 값까지 모두 동일한 SQL이 아니라면 부모 커서
와 자식 커서 모두 공유하지 못하고 별도의 커서를 가지게 된다. 오라클은 SQL을 ASCII 값으로 변환하여 인식하기 때문에 동일한
SQL로 인식하기 위해서는 대소문자뿐만 아니라 공백까지도 모두 동일하게 수행되어야 한다.
- OTLP시스템에서 사용 빈도가 높은 SQL에 대해서는 반드시 바인드 변수를 반드시 사용해야 하고 만약 편중된 데이터 값으로 인
해서 잘못된 실행 계획이 생성된다면 SQL 튜닝을 통해서 해결해야 한다.
- OTLP 시스템에서 사용 빈도가 높지 않고 편중된 데이터를 조회하는 SQL이나 DW 시스템과 같이 SQL 사용 빈도가 높지 않은 시스템에서는 리터럴 SQL 사용을 고려해 볼 수 있다.그런데 이때는 반드시 신뢰성 있는 통계 정보를 생성하고 유지해줘야 한다.
SELECT /*+ index(EMP01, I_dept_nmbr)*/ *
FROM EMP EMP01
WHERE DEPTNUM = :dept_num
AND :dept_num = '30'
UNION ALL
SELECT /*+ full(EMP01)*/ *
FROM EMP EMP01
WHERE DEPTNUM = :dept_num
AND :dept_num != '30';
- dept_num 컬럼에서 30의 분포도가 1% 이하로 가정할 때, index를 사용하여 접근하는 것이 full scan보다 빠르다.
만약 dept_num컬럼의 값이 30인 것들의 분포도가 1%이하 이고, 값이 50인 것들의 분포도가 10%를 훨씬 초과할 때 full scan을 적
용하는 것이 좋다.
'개발 및 관리 > Oracle 9i, 10g, 11g, 12c, 19c' 카테고리의 다른 글
PK, FK 설정 예제와 제약 조건 확인하기 (0) | 2011.10.23 |
---|---|
락의 종류 (0) | 2011.09.15 |
HASH PARTITION TABLE, LIST PARTITION TABLE (0) | 2011.06.21 |
파티션 테이블 (0) | 2011.06.21 |
파티션 뷰 (0) | 2011.06.21 |