문서유형ㅣ장애해결
분야ㅣ튜닝
적용제품버전ㅣ6FS06, 6FS07
문서번호ㅣTTUTS004
현상
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)
원인
plan hash value가 NLS 파라미터에 영향을 받도록 설정되어 있어 같은 plan 도 NLS 파라미터에 따라 다른 hash value를 가지게 됩니다.
해결
패치를 적용해 해결합니다. (적용패치: 167822i)
주의티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
FS07_229885f_2 패치가 적용되는 경우, 167822i 패치 내용을 되돌리는 영향도가 있어서 FS07_229885g 이후 패치를 적용합니다.
JDBC 드라이버 버전 차이로 인한 NLS 초기 세팅이 달라져 발견된 사항이므로, NLS 파라미터가 다르게 설정되지 않도록 주의합니다.