NLS 파라미터 값에 따른 동일 플랜의 hash 값 차이 현상

문서 유형
장애 해결
분야
튜닝
키워드
NLS
PLAN_HASH_VALUE
적용 제품 버전
6FS06
6FS07
1 more property

현상

NLS 파라미터가 Plan에 영향을 주어 같은 Plan임에도 Plan Hash Value이 다르게 설정되는 경우가 있습니다.
동일한 plan에 대해 JDBC에서 아래의 NLS 파라미터가 다르게 설정되면, 다른 plan hash value 가 발생합니다.
NLS_CALENDAR , NLS_COMP , NLS_CURRENCY , NLS_DATE_FORMAT , NLS_DATE_LANGUAGE , NLS_DUAL_CURRENCY , NLS_ISO_CURRENCY , NLS_LANGUAGE , NLS_LENGTH_SEMANTICS , NLS_NUMERIC_CHARACTERS , NLS_SORT , NLS_TERRITORY , NLS_TIMESTAMP_FORMAT , NLS_TIMESTAMP_TZ_FORMAT , NLS_TIME_FORMAT , NLS_TIME_TZ_FORMAT
--같은 쿼리에 대한 Plan hash value가 NLS_TIMESTAMP_TZ_FORMAT 변경에 따라 달라지는 예시 SQL> select * from dba_datafiles order by 2; SQL ID: g6tt6d49311kw Child number: 1290 Plan hash value: 1966304868 Execution Plan 1 ORDER BY (SORT) (Cost:741454, %%CPU:6, Rows:22322851) 2 HASH JOIN (Cost:504, %%CPU:66, Rows:22322851) 3 DPV: _VT_DATAFILE_BM (Cost:41, %%CPU:0, Rows:7268) 4 HASH JOIN (Cost:142, %%CPU:10, Rows:1535694) 5 DPV: _VT_DBFILE (Cost:41, %%CPU:0, Rows:7268) 6 HASH JOIN (Cost:86, %%CPU:1, Rows:105647) 7 HASH JOIN (Cost:44, %%CPU:0, Rows:7268) 8 TABLE ACCESS (ROWID): _DD_TS (Cost:3, %%CPU:0, Rows:5) 9 INDEX (FULL): _DD_TS_IDX1 (Cost:2, %%CPU:0, Rows:5) 10 DPV: _VT_DATAFILE (Cost:41, %%CPU:0, Rows:7268) 11 DPV: _VT_DATAFILE_HEADER (Cost:41, %%CPU:0, Rows:7268) SQL>alter session set NLS_TIMESTAMP_TZ_FORMAT="YYYY MM DD HH24.MI.SSXFF TZR"; Session altered. SQL> select * from dba_datafiles order by 2; SQL ID: g6tt6d49311kw Child number: 1509 Plan hash value: 1223193576 Execution Plan 1 ORDER BY (SORT) (Cost:741454, %%CPU:6, Rows:22322851) 2 HASH JOIN (Cost:504, %%CPU:66, Rows:22322851) 3 DPV: _VT_DATAFILE_BM (Cost:41, %%CPU:0, Rows:7268) 4 HASH JOIN (Cost:142, %%CPU:10, Rows:1535694) 5 DPV: _VT_DBFILE (Cost:41, %%CPU:0, Rows:7268) 6 HASH JOIN (Cost:86, %%CPU:1, Rows:105647) 7 HASH JOIN (Cost:44, %%CPU:0, Rows:7268) 8 TABLE ACCESS (ROWID): _DD_TS (Cost:3, %%CPU:0, Rows:5) 9 INDEX (FULL): _DD_TS_IDX1 (Cost:2, %%CPU:0, Rows:5) 10 DPV: _VT_DATAFILE (Cost:41, %%CPU:0, Rows:7268) 11 DPV: _VT_DATAFILE_HEADER (Cost:41, %%CPU:0, Rows:7268)
SQL
복사

원인

plan hash value가 NLS 파라미터에 영향을 받도록 설정되어 있어 같은 plan 도 NLS 파라미터에 따라 다른 hash value를 가지게 됩니다.

해결

패치를 적용해 해결합니다. (적용패치: 167822i)
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
FS07_229885f_2 패치가 적용되는 경우, 167822i 패치 내용을 되돌리는 영향도가 있어서 FS07_229885g 이후 패치를 적용합니다.
JDBC 드라이버 버전 차이로 인한 NLS 초기 세팅이 달라져 발견된 사항이므로, NLS 파라미터가 다르게 설정되지 않도록 주의합니다.