[운영 종료] TmaxTibero Tech Blog

티맥스티베로 공식 블로그는 https://tmaxtibero.blog/ 로 이전되었습니다.

티맥스티베로 공식 블로그 이전 자세히보기

튜닝

[Tibero] SQL Tuning (14)

TmaxTiberotech 2023. 6. 14. 14:15

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