Tuning 사례
5. VIEW MERGING
View안의 테이블이 바깥 테이블과 섞이면서 join되어 비효율적 플랜을 푸는 View merging을
통해 옵티마이저는 더욱 다양한 액세스 경로를 대상으로 최적화를 수행할 수 있습니다.
EXAMPLE
select ...
(select b.prjt_nm
from project_info B
where b.prjt_cd = main.prjt_cd) projectName,
...
(select max(reg_date)
from ims_comment
where issue_id = main.issue_id) lastActDate,
...
from IMS_ISSUE_VIEW main,
ims_activity ac,
tody_product tp
where …
and (main.PROD_CODE,
main.VERS_CODE) in( select PROD_CODE,
VERS_CODE
from IMS_VERSION_CONN_MAP
where CONN_TYPE = 'R'
and (SYSTEM_CODE,
GROUP_CODE) in( select SYSTEM_CODE,
GROUP_CODE
from TODY_USER_GROUP_MAP
where SYSTEM_CODE = 'ims‘ and USER_ID = ?) );
|
IMS_ISSUE_VIEW
CREATE OR REPLACE FORCE VIEW "IMS_ISSUE_VIEW" (…) AS
SELECT …
FROM IMS_ISSUE ISSUE, TODY_PRODUCT PRODUCT, TODY_VERSION VERSION ,TODY_VERSION PVERSION, TODY_MODULE MODULE, TODY_USER REGISTER ,TODY_USER MANAGER, IMS_PRIORITY PRIORITY, IMS_RESOLUTION RESOLUTION ,IMS_SEVERITY SEVERITY, IMS_ACTIVITY ACTIVITY, IMS_VERSION_STATUS STATUS ,IMS_ISSUE_CATEGORY CATEGORY, TODY_CODE_ITEM DB, TODY_CODE_ITEM TOOL ,TODY_CODE_ITEM EDITION, TODY_CODE_ITEM MIDDLEWARE, TODY_CODE_ITEM PLATFORM ,TODY_CODE_ITEM OS, TODY_CUSTOMER CUSTOMER, TODY_USER OWNER
WHERE …
|
sql trace 일부
…
1292 hash join (et=11838, cr=0, cu=0, co=21288, cpu=0, ro=33228)
6 table access (rowid) IMS_ACTIVITY(2147) (et=27, cr=1, cu=0, co=2, cpu=0, ro=5)
11 index (full) XPKIMS_ACTIVITY(2418) (et=6, cr=1, cu=0, co=1, cpu=0, ro=11)
62004 hash join (et=158856, cr=0, cu=0, co=21284, cpu=0, ro=54373)
72 table access (rowid) TODY_PRODUCT(2377) (et=90, cr=2, cu=0, co=9, cpu=0, ro=70)
86 index (full) XPKTODY_PRODUCT(2506) (et=8, cr=1, cu=0, co=1, cpu=0, ro=86)
62108 hash join (et=153919, cr=0, cu=0, co=21273, cpu=0, ro=54373)
86 table access (rowid) TODY_PRODUCT(2377) (et=69, cr=2, cu=0, co=9, cpu=0, ro=86)
…
|
옵티마이저는 view 안쪽을 풀어서 바깥쪽 테이블들과 순서를 섞어가며 플랜을 생성합니다.
그러나 예측 비용기반으로 최적이라고 생각된 플랜이 때로는 성능 저하를 유발하기도 합니다.
view merging 으로 쿼리 성능이 안좋아질 시에는 view 내부 쿼리가 풀리지 않도록 고정합니다.
Disable view merging
view merging을 방지하기 위해 힌트를 추가합니다.
CREATE OR REPLACE FORCE VIEW "IMS_ISSUE_VIEW" (…) AS
SELECT /*+NO_MERGE*/ …
FROM IMS_ISSUE ISSUE, TODY_PRODUCT PRODUCT, TODY_VERSION VERSION ,TODY_VERSION PVERSION, TODY_MODULE MODULE, TODY_USER REGISTER ,TODY_USER MANAGER, IMS_PRIORITY PRIORITY, IMS_RESOLUTION RESOLUTION ,IMS_SEVERITY SEVERITY, IMS_ACTIVITY ACTIVITY, IMS_VERSION_STATUS STATUS ,IMS_ISSUE_CATEGORY CATEGORY, TODY_CODE_ITEM DB, TODY_CODE_ITEM TOOL ,TODY_CODE_ITEM EDITION, TODY_CODE_ITEM MIDDLEWARE, TODY_CODE_ITEM PLATFORM ,TODY_CODE_ITEM OS, TODY_CUSTOMER CUSTOMER, TODY_USER OWNER
WHERE …
|
'튜닝' 카테고리의 다른 글
[Tibero] SQL Tuning (13) (0) | 2023.06.13 |
---|---|
[Tibero] SQL Tuning (12) (0) | 2023.06.13 |
[Tibero] SQL Tuning (11) (0) | 2023.06.12 |
[Tibero] SQL Tuning (10) (0) | 2023.06.09 |
[Tibero] SQL Tuning (9) (0) | 2023.06.08 |