CURSOR_SHARING_FORCE 힌트

2024. 5. 12.·Oracle/Performance

Oracle 23ai(23.4)에 CURSOR_SHARING_FORCE 힌트가 추가되었습니다. CURSOR_SHARING_FORCE 힌트를 사용하면 구문 레벨에서 Cursor Sharing 기능을 Force로 설정할 수 있습니다.

-- 1
SELECT name, inverse, target_level, version
  FROM v$sql_hint
 WHERE name IN ('CURSOR_SHARING_EXACT', 'CURSOR_SHARING_FORCE');

NAME                 INVERSE              TARGET_LEVEL VERSION
-------------------- -------------------- ------------ -------
CURSOR_SHARING_EXACT CURSOR_SHARING_FORCE            1 9.0.0
CURSOR_SHARING_FORCE CURSOR_SHARING_EXACT            1 23.1.0

2 rows selected.

 

Cursor Sharing 기능은 cursor_sharing 파라미터로 설정하며 기본값은 EXACT입니다.

-- 2-1
SELECT name, value, isses_modifiable, description
  FROM v$parameter
 WHERE name = 'cursor_sharing';

NAME           VALUE DEFAULT_VALUE ISSES_MODIFIABLE DESCRIPTION
-------------- ----- ------------- ---------------- -------------------
cursor_sharing EXACT EXACT         TRUE             cursor sharing mode

1 row selected.

-- 2-2
SELECT name, ordinal, value, isdefault
  FROM v$parameter_valid_values
 WHERE name = 'cursor_sharing';

NAME           ORDINAL VALUE   ISDEFAULT
-------------- ------- ------- ---------
cursor_sharing       1 FORCE   FALSE
cursor_sharing       2 EXACT   TRUE
cursor_sharing       3 SIMILAR FALSE

3 rows selected.

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다.

-- 3
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER);

 

아래와 같이 CURSOR_SHARING_FORCE 힌트를 사용하여 리터럴 값이 다른 2개의 쿼리를 수행하겠습니다.

-- 4-1
SELECT /*+ CURSOR_SHARING_FORCE */ * FROM t1 WHERE c1 = 1;

-- 4-2
SELECT /*+ CURSOR_SHARING_FORCE */ * FROM t1 WHERE c1 = 2;

 

V$SQL 뷰를 조회하면 앞서 수행한 쿼리의 커서가 공유된 것을 확인할 수 있습니다.

-- 5
SELECT sql_text, loads, executions
  FROM v$sql
 WHERE sql_text LIKE 'SELECT /*+ CURSOR_SHARING_FORCE */%';

SQL_TEXT                                                           LOADS EXECUTIONS
------------------------------------------------------------------ ----- ----------
SELECT /*+ CURSOR_SHARING_FORCE */ * FROM t1 WHERE c1 = :"SYS_B_0"     1          2

1 row selected.
저작자표시 비영리 변경금지 (새창열림)
'Oracle/Performance' 카테고리의 다른 글
  • _optimizer_nested_loop_join 힌트
  • ROWNUM을 사용하는 FETCH FIRST 변환
  • 바인드 변수 값 조회
  • 파티셔닝을 통한 GC 경합 해소
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 관심을 가져왔습니다. 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며 Oracle 사의 공식적인 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (204)
      • Oracle (176)
        • SQL (36)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (7)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
CURSOR_SHARING_FORCE 힌트
상단으로

티스토리툴바