현상
Tibero에서 특정테이블 SELECT 통해 조회 시 WHERE절에 있는 컬럼이 INDEX로 구성되어 있음에도 FULL SCAN으로 수행되는 현상 입니다.
DROP INDEX TIBERO.TB_STOR_IX01;
CREATE INDEX "TIBERO"."TB_STOR_IX01" ON TIBERO."TB_STOR" (
"RECORD_CENTER_ID" ASC,
"ORIGN_ID" ASC
)
/
EXEC DBMS_STATS.GATHER_TABLE_STATS('TIBERO', 'TB_STOR', estimate_percent=>3, cascade=>TRUE, degree=>8);
SELECT * FROM TIBERO.TB_STOR
WHERE RECORD_CENTER_ID = '0000001'
AND ORIGN_ID = 'OR20210506145231470'
AND VIRUS_FLAG = '1'
;
Execution Plan
--------------------------------------------------------------------------------
1 TABLE ACCESS (FULL): TB_STOR (Cost:1185460, %%CPU:0, Rows:1)
Predicate Information
--------------------------------------------------------------------------------
1 - filter: (""TB_STOR"".""VIRUS_FLAG"" = '1') AND (""TB_STOR"".""RECO
RD_CENTER_ID"" = '0000001') AND (""TB_STOR"".""ORIGN_ID"" = 'OR20210506145231470') (0.000 * 1.000 * 1.000)0') (0.000 * 1.000 * 1.000)
NAME VALUE
------------------------------ ----------
db block gets 6349
consistent gets 2782280
physical reads 2785431
redo size 0
sorts (disk) 0
sorts (memory) 3
rows processed 0
SQL
복사
원인
Tibero 7버전부터 _opt_adjust_table_pred_selectivity 디폴트 값이 0으로 변경됐습니다.
Tibero 7부터 특정 패치(245376)가 반영되어 해당 패치 유무에 따라 옵티마이저가 다르게 동작합니다.
해결
_opt_adjust_table_pred_selectivity = 100 를 적용해, 조건절에 맞는 Index 존재 시 Index Scan 방식으로 수행되도록 설정합니다.