데이터 웨어하우스 성능 최적화: 기울기 최적화 - 표현식 기울기 계산을 위한 힌트 최적화

이 기사는 Huawei 클라우드 커뮤니티 " GaussDB(DWS) 성능 조정: 왜곡 최적화 - 식 계산 왜곡의 힌트 최적화 "에서 공유됩니다. 저자: Ge Li Ge.

1. 원시 SQL



TMP4.TAX_AMT, CATE.L1_PUR_ITEM_CATG_CN_NAME 선택 

|| '-' || 

CATE.L2_PUR_ITEM_CATG_CN_NAME || '-' || 

CATE.L3_PUR_ITEM_CATG_CN_NAME AS PRODUCT_CATEGORY, 

MATE.ITEM_CODE AS PRODUCT_CODE, 

INVEN.INVENTORY_ORG_NAME, 

TMP4.INVOICE_WITHHOLDING_TAX_GROUP, 

TMP4.PAYMENT_WITHHOLDING_TAX_GROUP , 

TMP4.PO_CHARGE_ACCOUNT_CODE 

, TMP4.CFS_INVOICE_ NUMBER, 

APR.TAX_INVOICE_DATE 

FROM DWLTAX.DWL_TAX_TAXDP_ERP_AP_INVOICE_TMP5 TMP4, 

DWRDIM_DW1.DWR_DIM_PUR_ITEM_CATEGORY_D CATE, 

DWRDIM_DW1.DWR_DIM_MATERIAL_CODE_D MATE , 

DWRDIM_DW1.DWR_DIM_INVENTORY_ORG_D INVEN, 

DWTAXDI.DWI_AP_INVOICE_I AP, 

DWTAXDI.DWI_AP_INVOICE_REGSTN_I APR 

WHERE 1 = 1

AND TMP4.ITEM_CATEGORY_KEY = CATE.PUR_ITEM_CATG_KEY(+) 

AND CATE.DEL_FLAG(+) = 'N' 

AND TMP4.ITEM_ID = MATE.ITEM_ID(+) 

AND MATE.DEL_FLAG(+) = 'N' 

AND TMP4.PO_SHIPMENT_TARGET_INV_ORG_KEY = INVEN .INVENTORY_ORG_KEY(+) 

AND INVEN.DEL_FLAG(+) = 'N' 

AND TMP4.AP_INVOICE_ID = AP.AP_INVOICE_ID(+) 

AND 6600 || AP.ATTRIBUTE1 = TO_CHAR(APR.AP_INVOICE_REGSTN_ID(+))

실행 성능, 특정 실행 상태 조회 및 SQL 자가진단 정보 (첨부된 case-step1-original 실행 정보.txt 참조)

아이디 | 운영 | A-타임 | A행 | 전자 행 | E-구별 | 피크 메모리 | 전자 메모리 | 폭 | 전자폭 | 전자 비용 

----+------------------------------------------ -------------------------------------------------- ----------+---------+------------+- -----------+------------+----------------+-------- --------+-----------+---------+------------- 

1 | -> 행 어댑터 | 69922.773 | 69237018 | 69237018 | | 87KB | | | 573 | 15160857.61 

2 | -> 벡터 스트리밍(유형: GATHER) | 65581.989 | 69237018 | 69237018 | | 536KB | | | 573 | 15160857.61 

3 | -> 벡터 해시 오른쪽 조인(4, 6) | [61186.201, 73129.055] | 69237018 | 69237018 | | [306MB, 682MB] | 1113MB(9990MB) | | 573 | 15159431.83

4 | -> 벡터 스트리밍(유형: BROADCAST ng: LC_DL1->LC_DW1) | [554.217, 21008.078] | 1382000544 | 1381572384 | 282184 | [4MB, 4MB] | 3MB | | 16 | 7056095.88 

5 | -> dwifin.dwi_ap_invoice_regstns에서 CStore 스캔 | [5.354, 11.617] | 28791678 | 28782758 | | [1MB, 1MB] | 1MB | | 16 | 28004.18 

6 | -> 벡터 해시 레프트 조인 (7, 19) | [1728.008, 2017.488] | 69237018 | 69237018 | 79721 | [834KB, 834KB] | 16MB | [229,252] | 578 | 1832322.90 

7 | -> 벡터 해시 레프트 조인 (8, 17) | [1428.799, 1925.653] | 69237018 | 69237018 | 179 | [32MB, 32MB] | 28MB(8901MB) | | 576 | 1817105.07 

8 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) | [996.780, 1635.826] | 69237018 | 69237018 | 4167 | [1MB, 1MB] | 2MB | | 570 | 1788113.85

9 | -> 벡터 해시 레프트 조인(10, 14) | [1086.903, 1780.641] | 69237018 | 69237018 | | [173MB, 174MB] | 227MB(9067MB) | | 570 | 1304897.12 

10 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) | [153.628, 891.680] | 69237018 | 69237018 | 20271 | [1MB, 1MB] | 2MB | | 567 | 847160.16 

11 | -> 벡터 해시 레프트 조인 (12, 13) | [367.155, 465.821] | 69237018 | 69237018 | | [30MB, 30MB] | 22MB(8896MB) | | 567 | 363943.43 

12 | -> dwltax.dwl_tax_taxdp_erp_ap_invoice_tmp5 tmp4에서 CStore 스캔 | [150.676, 178.827] | 69237018 | 69237018 | 526 | [4MB, 4MB] | 1MB | | 553 | 340168.44 

13 | -> dwrdim_dw1.dwr_dim_pur_item_category_d cate에 대한 CStore 스캔 | [14.549, 24.399] | 8228448 | 8228448 | 171426 | [2MB, 2MB] | 1MB | [104,104] | 26 | 9056.99

14 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART BROADCAST ng: LC_DL1->LC_DW1) | [315.926, 339.782] | 117191217 | 117191170 | 2441483 | [1MB, 1MB] | 3MB | [47,47] | 22 | 406136.10 

15 | -> 벡터 파티션 반복자 | [118.307, 151.248] | 117191170 | 117191170 | | [41KB, 41KB] | 1MB | | 22 | 300641.93 

16 | -> dwifin.dwi_ap_invoice s에서 분할된 CStore 스캔 | [86.557, 111.947] | 117191170 | 117191170 | | [6MB, 6MB] | 1MB | | 22 | 300641.93 

17 | -> 벡터 스트리밍(유형: PART LOCAL PART 방송) | [60.429, 99.381] | 15442613 | 15442566 | 321720 | [584KB, 584KB] | 2MB | [58,58] | 19 | 49578.19 

18 | -> dwrdim_dw1.dwr_dim_material_code_d 메이트의 CStore 스캔 | [19.779, 33.206] | 15442566 | 15442566 | | [1MB, 2MB] | 1MB | | 19 | 35704.02

19 | -> dwrdim_dw1.dwr_dim_inventory_org_d inven의 CStore 스캔 | [0.383, 0.739] | 135072 | 135072 | 2814 | [1MB, 1MB] | 1MB | [53,53] | 14 | 2823.85 

SQL 진단 정보 

---------------------------------------------- ---------------------------------------------- 

진단 정보 실행 

PlanNode [4] 브로드캐스트의 Large Table "Vector Streaming(유형: BROADCAST ng: LC_DL1->LC_DW1)" 

술어 정보(계획 ID로 식별됨) 

-------------------- -------------------------------------------------- -------------------------------------------------- ------ 

3 --벡터 해시 오른쪽 조인(4, 6) 

해시 조건: (((numeric_out(s.ap_invoice_regstn_id))::문자 가변)::텍스트 = ('6600'::텍스트 || ( s.attribute1)::텍스트))

6 --벡터 해시 왼쪽 조인(7, 19) 

해시 조건: (tmp4.po_shipment_target_inv_org_key = inven.inventory_org_key) 

7 --벡터 해시 왼쪽 조인(8, 17) 

해시 조건: (tmp4.item_id = mate.item_id) 

스큐 조인 통계에 의해 최적화됨 

8 --벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) 

스큐 필터(유형: ROUNDROBIN): ((tmp4.item_id = (-999999)::numeric) OR (tmp4.item_id IS NULL)) 

9 -- Vector Hash Left Join (10, 14) 

Hash Cond: (tmp4.ap_invoice_id = s.ap_invoice_id) 

통계 

10에 의해 최적화된 Skew Join --벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) 

Skew 필터(유형: ROUNDROBIN): (tmp4. ap_invoice_id = 1001113812002::numeric) 

11 --벡터 해시 레프트 조인(12, 13)

해시 조건: (tmp4.item_category_key = cate.pur_item_catg_key) 

13 --dwrdim_dw1.dwr_dim_pur_item_category_d cate 

필터에 대한 CStore 스캔: ((cate.del_flag)::text = 'N'::text) 

푸시다운 조건자 필터: ((cate.del_flag )::text = 'N'::text) 

14 --벡터 스트리밍(유형: PART REDISTRIBUTE PART BROADCAST ng: LC_DL1->LC_DW1) 

스큐 필터(유형: BROADCAST): (s.ap_invoice_id = 1001113812002::numeric) 

15 --벡터 파티션 반복기 

반복: 147 16 --dwifin.dwi_ap_invoice s 
정적 정리에 의해 선택된 파티션 

에 대한 분할된 CStore 스캔 : 1..147 
17 --벡터 스트리밍(유형: PART LOCAL PART BROADCAST) 
스큐 필터(유형: BROADCAST): (mate.item_id = (-999999)::숫자)




18 --dwrdim_dw1.dwr_dim_material_code_d 메이트 

필터의 CStore 스캔: ((mate.del_flag)::text = 'N'::text) 

푸시다운 술어 필터: ((mate.del_flag)::text = 'N'::text) 

19 --dwrdim_dw1.dwr_dim_inventory_org_d inven 

필터에 대한 CStore 스캔: ((inven.del_flag)::text = 'N'::text) 

푸시다운 술어 필터: ((inven.del_flag)::text = 'N'::text)

2. 대형시청방송 금지

위의 섹션에서 볼 수 있듯이 id=4인 단계는 실제로 브로드캐스트된 큰 결과 집합(2879w 항목)이며 이후 id=5인 HashJoin은 오랜 시간이 걸립니다. 따라서 dwifin.dwi_ap_invoice_regstn은 힌트를 추가하여 브로드캐스팅을 금지합니다. 분석 결과 dwifin.dwi_ap_invoice_regstn 테이블은 apr 뷰를 확장했을 때 나타나는 것으로 확인되어 다음과 같은 힌트 정보가 추가되었는데, 여기서

1. 병합 없음(apr)은 보기 apr의 명령문이 승격되는 것을 방지하여 힌트 정보의 실패를 초래합니다.

2. no broadcast(4월)는 apr이 방송을 금지한다는 의미입니다.

EXPLAIN 성능 

SELECT /*+ 병합 없음(4월) 브로드캐스트 없음(4월) */ 

TMP4.TAX_AMT, 

CATE.L1_PUR_ITEM_CATG_CN_NAME || '-' || 

CATE.L2_PUR_ITEM_CATG_CN_NAME || '-' || 

CATE.L3_PUR_ITEM_CATG_CN_NAME AS PRODUCT_CATEGORY, 

MATE.ITEM_CODE AS PRODUCT_CODE, 

INVEN.INVENTORY_ORG_NAME, 

TMP4.INVOICE_WITHHOLDING_TAX_GROUP, 

TMP4.PAYMENT_WITHHOLDING_TAX_GROUP , 

TMP4.PO_CHARGE_ACCOUNT_CODE 

, TMP4.CFS_INVOICE_ NUMBER, 

APR.TAX_INVOICE_DATE 

FROM DWLTAX.DWL_TAX_TAXDP_ERP_AP_INVOICE_TMP5 TMP4, 

DWRDIM_DW1.DWR_DIM_PUR_ITEM_CATEGORY_D CATE, 

DWRDIM_DW1.DWR_DIM_MATERIAL_CODE_D MATE , 

DWRDIM_DW1.DWR_DIM_INVENTORY_ORG_D INVEN, 

DWTAXDI.DWI_AP_INVOICE_I AP,

DWTAXDI.DWI_AP_INVOICE_REGSTN_I APR 

WHERE 1 = 1 

AND TMP4.ITEM_CATEGORY_KEY = CATE.PUR_ITEM_CATG_KEY(+) 

AND CATE.DEL_FLAG(+) = 'N' 

AND TMP4.ITEM_ID = MATE.ITEM_ID(+) 

AND MATE.DEL_FLAG(+) = ' N' 

AND TMP4.PO_SHIPMENT_TARGET_INV_ORG_KEY = INVEN.INVENTORY_ORG_KEY(+) 

AND INVEN.DEL_FLAG(+) = 'N' 

AND TMP4.AP_INVOICE_ID = AP.AP_INVOICE_ID(+) 

AND 6600 || AP.ATTRIBUTE1 = TO_CHAR(APR.AP_INVOICE_REGSTN_ID(+))

위 문장의 성능 정보 얻기(자세한 내용은 첨부된 case-step2-prohibit large table broadcast.txt 참조)

아이디 | 운영 | A-타임 | A행 | 전자 행 | E-구별 | 피크 메모리 | 전자 메모리 | 폭 | 전자폭 | 전자 비용 

----+------------------------------------------ -------------------------------------------------- -------------+---------+----------- +-----------+------------+--+------- ---------+-----------+---------+------------- 

1 | -> 행 어댑터 | 15685.781 | 69237018 | 69237018 | | 87KB | | | 573 | 33341721.22 

2 | -> 벡터 스트리밍(유형: GATHER) | 11361.740 | 69237018 | 69237018 | | 536KB | | | 573 | 33341721.22 

3 | -> 벡터 해시 레프트 조인 (4, 19) | [15269.267, 18985.791] | 69237018 | 69237018 | | [74MB, 74MB] | 101MB(9984MB) | | 573 | 33340295.43

4 | -> 벡터 스트리밍(유형: REDISTRIBUTE) | [4743.867, 18632.182] | 69237018 | 69237018 | 79721 | [1MB, 2MB] | 2MB | | 578 | 29821930.76 

5 | -> 벡터 해시 레프트 조인 (6, 18) | [1473.990, 15359.055] | 69237018 | 69237018 | | [866KB, 898KB] | 16MB | | 578 | 1832322.90 

6 | -> 벡터 해시 왼쪽 조인(7, 16) | [1130.814, 15223.646] | 69237018 | 69237018 | 179 | [32MB, 32MB] | 28MB(9923MB) | | 576 | 1817105.07 

7 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) | [681.709, 14909.424] | 69237018 | 69237018 | 4167 | [1MB, 1MB] | 2MB | | 570 | 1788113.85 

8 | -> 벡터 해시 왼쪽 조인(9, 13) | [1049.201, 12602.796] | 69237018 | 69237018 | | [173MB, 174MB] | 227MB(10089MB) | | 570 | 1304897.12

9 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) | [128.704, 11737.099] | 69237018 | 69237018 | 20271 | [1MB, 1MB] | 2MB | | 567 | 847160.16 

10 | -> 벡터 해시 레프트 조인 (11, 12) | [368.537, 443.623] | 69237018 | 69237018 | | [30MB, 30MB] | 22MB(9918MB) | | 567 | 363943.43 

11 | -> dwltax.dwl_tax_taxdp_erp_ap_invoice_tmp5 tmp4에서 CStore 스캔 | [148.366, 175.347] | 69237018 | 69237018 | 526 | [4MB, 4MB] | 1MB | | 553 | 340168.44 

12 | -> dwrdim_dw1.dwr_dim_pur_item_category_d cate에 대한 CStore 스캔 | [13.319, 24.442] | 8228448 | 8228448 | 171426 | [2MB, 2MB] | 1MB | [104,104] | 26 | 9056.99 

13 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART BROADCAST ng: LC_DL1->LC_DW1) | [242.053, 294.233] | 117191217 | 117191170 | 2441483 | [1MB, 1MB] | 3MB | [47, 47] | 22 | 406136.10

14 | -> 벡터 파티션 반복자 | [118.124, 154.954] | 117191170 | 117191170 | | [41KB, 41KB] | 1MB | | 22 | 300641.93 

15 | -> dwifin.dwi_ap_invoice s에서 분할된 CStore 스캔 | [86.942, 105.441] | 117191170 | 117191170 | | [6MB, 6MB] | 1MB | | 22 | 300641.93 

16 | -> 벡터 스트리밍(유형: PART LOCAL PART 방송) | [83.793, 117.853] | 15442613 | 15442566 | 321720 | [584KB, 584KB] | 2MB | [58,58] | 19 | 49578.19 

17 | -> dwrdim_dw1.dwr_dim_material_code_d 메이트의 CStore 스캔 | [21.898, 35.895] | 15442566 | 15442566 | | [1MB, 2MB] | 1MB | | 19 | 35704.02 

18 | -> dwrdim_dw1.dwr_dim_inventory_org_d inven의 CStore 스캔 | [0.389, 0.661] | 135072 | 135072 | 2814 | [1MB, 1MB] | 1MB | [53,53] | 14 | 2823.85

19 | -> 벡터 스트리밍(유형: REDISTRIBUTE ng: LC_DL1->LC_DW1) | [30.667, 49.474] | 28791678 | 28782758 | 599641 | [2MB, 2MB] | 3MB | [75,75] | 16 | 56030.49 

20 | -> 4월의 벡터 서브쿼리 스캔 | [42.087, 61.734] | 28791678 | 28782758 | | [376KB, 376KB] | 1MB | | 16 | 30826.02 

21 | -> dwifin.dwi_ap_invoice_regstns에서 CStore 스캔 | [5.177, 8.049] | 28791678 | 28782758 | | [1MB, 1MB] | 1MB | | 16 | 28004.18 

SQL 진단 정보 

---------------------------------------------- -------------------------------------------------- ---------- 

진단 정보 실행 

PlanNode[4] DataSkew:"Vector Streaming(type: REDISTRIBUTE)", min_dn_tuples:257082, max_dn_tuples:47206637 

술어 정보(계획 ID로 식별됨)

-------------------------------------------------- -------------------------------------------------- ------------------------------ 

3 --벡터 해시 왼쪽 조인 (4, 19) 

해시 조건: ((('6600 '::텍스트 || (s.attribute1)::text)) = ((numeric_out(apr.ap_invoice_regstn_id))::문자 가변)::text) 

5 --벡터 해시 왼쪽 조인 (6, 18) 

해시 조건: (tmp4.po_shipment_target_inv_org_key = inven.inventory_org_key) 

6 --Vector Hash Left Join (7, 16) 

Hash Cond: (tmp4.item_id = mate.item_id) 

Skew Join 통계에 의해 최적화됨 

7 --Vector Streaming(type: PART REDISTRIBUTE PART ROUNDROBIN ) 

스큐 필터(유형: ROUNDROBIN): ((tmp4.item_id = (-999999)::numeric) OR (tmp4.item_id IS NULL)) 

8 --벡터 해시 왼쪽 조인(9, 13)

해시 조건: (tmp4.ap_invoice_id = s.ap_invoice_id) 

스큐 조인 통계에 의해 최적화됨 

9 --벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) 

스큐 필터(유형: ROUNDROBIN): (tmp4.ap_invoice_id = 1001113812002::numeric) 

10 - -벡터 해시 왼쪽 조인(11, 12) 

해시 조건: (tmp4.item_category_key = cate.pur_item_catg_key) 

12 --dwrdim_dw1.dwr_dim_pur_item_category_d cate 

필터에서 CStore 스캔: ((cate.del_flag)::text = 'N'::text ) 

푸시다운 술어 필터: ((cate.del_flag)::text = 'N'::text) 

13 --벡터 스트리밍(유형: PART REDISTRIBUTE PART BROADCAST ng: LC_DL1->LC_DW1) 

스큐 필터(유형: BROADCAST): ( s.ap_invoice_id = 1001113812002::numeric) 

14 --벡터 파티션 반복자 

반복: 147

15 --dwifin.dwi_ap_invoice s 

정적 정리에 의해 선택된 파티션에 대한 분할된 CStore 스캔: 1..147 

16 --벡터 스트리밍(유형: PART LOCAL PART BROADCAST) 

스큐 필터(유형: BROADCAST): (mate.item_id = (-999999 )::숫자) 

17 --dwrdim_dw1.dwr_dim_material_code_d 메이트 

필터에서 CStore 스캔: ((mate.del_flag)::text = 'N'::text) 

푸시다운 술어 필터: ((mate.del_flag)::text = 'N '::text) 

18 --dwrdim_dw1.dwr_dim_inventory_org_d inven 필터에서 CStore 스캔 

: ((inven.del_flag)::text = 'N'::text) 

푸시다운 술어 필터: ((inven.del_flag)::text = 'N '::텍스트)

3. 기울기 표현의 힌트

자가 진단 정보에서 발견한 경사 경고

cke_176.png

그리고 플랜 ID 4의 오퍼레이터는

cke_177.png

그 중 s는 dwtaxdi.dwi_ap_invoice_i 뷰의 확장 테이블 dwifin.dwi_ap_invoice이며, 이 테이블의 attribute1 컬럼의 통계 정보는 다음과 같으며 NULL 값에 심각한 왜곡이 있음을 알 수 있다.

cke_178.png

재배포 열이 6600 || AP.ATTRIBUTE1 식이므로 DWS의 현재 기울어진 힌트는 식을 지원하지 않습니다. 식의 기울어진 값 힌트를 구현하기 위해 다음 해결 방법을 수행하기 때문입니다.

SELECT /*+ 병합 없음(apr) 없음 브로드캐스트(apr) 병합 없음(ap) skew(ap (attr1) ('6600')) */ 

TMP4.TAX_AMT, 

CATE.L1_PUR_ITEM_CATG_CN_NAME || '-' || 

CATE.L2_PUR_ITEM_CATG_CN_NAME || '-' || 

CATE.L3_PUR_ITEM_CATG_CN_NAME AS PRODUCT_CATEGORY, 

MATE.ITEM_CODE AS PRODUCT_CODE, 

INVEN.INVENTORY_ORG_NAME, 

TMP4.INVOICE_WITHHOLDING_TAX_GROUP, 

TMP4.PAYMENT_WITHHOLDING_TAX_GROUP , 

TMP4.PO_CHARGE_ACCOUNT_CODE 

, TMP4.CFS_INVOICE_ NUMBER, 

APR.TAX_INVOICE_DATE 

FROM DWLTAX.DWL_TAX_TAXDP_ERP_AP_INVOICE_TMP5 TMP4, 

DWRDIM_DW1.DWR_DIM_PUR_ITEM_CATEGORY_D CATE, 

DWRDIM_DW1.DWR_DIM_MATERIAL_CODE_D MATE , 

DWRDIM_DW1.DWR_DIM_INVENTORY_ORG_D INVEN,

(select *, 6600 || ap.attribute1에서 dwtaxdi.dwi_ap_invoice_i ap에서 att1 as as ast1 as) ap, 

dwtaxdi.dwi_ap_invoice_regstn_i 

apr here 1 = 1 

및 tmp4.item_category_key = cate.pur_item_catg_key (+) 

및 cate.del_flag (+) 및 cate.dleg. 

AND TMP4.ITEM_ID = MATE.ITEM_ID(+) 

AND MATE.DEL_FLAG(+) = 'N' 

AND TMP4.PO_SHIPMENT_TARGET_INV_ORG_KEY = INVEN.INVENTORY_ORG_KEY(+) 

AND INVEN.DEL_FLAG(+) = 'N' 

AND TMP4.AP_INVOICE_ID = AP .AP_INVOICE_ID(+) 

AND ATTR1 = TO_CHAR(APR.AP_INVOICE_REGSTN_ID(+))

하위 쿼리 AP를 빌드합니다.

선택 *, 6600 || DWTAXDI.DWI_AP_INVOICE_I AP에서 ATTR1로 AP.ATTRIBUTE1

원래 연결된 열 식을 하위 쿼리에 넣은 다음 6600 || AP.ATTRIBUTE1의 이름을 attr1로 지정합니다.

상위 쿼리에서 먼저 AP 하위 쿼리의 승격을 금지합니다. 그러면 상위 쿼리에서 힌트 하위 쿼리 AP의 결과 집합의 attr1 열에 왜곡된 값 '6600'이 있습니다. 이 기울기 값이 계산되고(NULL || 6600 = '6600') 원래 연관 계산에서 연관 식은 다음과 같다.

cke_179.png

다음과 같이 새 문의 성능을 가져옵니다(자세한 내용은 첨부된 case-step3-slant optimization.txt 참조).

아이디 | 운영 | A-타임 | A행 | 전자 행 | E-구별 | 피크 메모리 | 전자 메모리 | 폭 | 전자폭 | 전자 비용 

----+------------------------------------------ -------------------------------------------------- ----------+--------+-----------+--- --------+------------+----------------+----------- -----+-----------+---------+------------ 

1 | -> 행 어댑터 | 9045.793 | 69237018 | 69237018 | | 87KB | | | 573 | 2040755.71 

2 | -> 벡터 스트리밍(유형: GATHER) | 4842.656 | 69237018 | 69237018 | | 520KB | | | 573 | 2040755.71 

3 | -> 벡터 해시 레프트 조인 (4, 21) | [2673.707, 11389.688] | 69237018 | 69237018 | | [1MB, 1MB] | 16MB | | 573 | 2039329.92

4 | -> 벡터 해시 레프트 조인 (5, 19) | [1951.482, 10931.220] | 69237018 | 69237018 | 179 | [32MB, 32MB] | 28MB(10018MB) | | 571 | 2009687.71 

5 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) | [1541.777, 10591.702] | 69237018 | 69237018 | 4167 | [1MB, 1MB] | 2MB | | 565 | 1980696.49 

6 | -> 벡터 해시 레프트 조인 (7, 18) | [1703.438, 1980.655] | 69237018 | 69237018 | | [30MB, 30MB] | 22MB(10010MB) | | 565 | 1497479.76 

7 | -> 벡터 해시 왼쪽 조인(8, 10) | [1523.277, 1708.622] | 69237018 | 69237018 | 526 | [165MB, 166MB] | 191MB(10151MB) | | 551 | 1473704.77 

8 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) | [94.501, 203.619] | 69237018 | 69237018 | 20271 | [1MB, 1MB] | 2MB | | 553 | 823385.17

9 | -> dwltax.dwl_tax_taxdp_erp_ap_invoice_tmp5 tmp4에서 CStore 스캔 | [142.734, 171.486] | 69237018 | 69237018 | | [4MB, 4MB] | 1MB | | 553 | 340168.44 

10 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART BROADCAST ng: LC_DL1->LC_DW1) | [811.192, 853.583] | 117191217 | 117191170 | 2441483 | [2MB, 2MB] | 3MB | [44,44] | 17 | 598718.74 

11 | -> 벡터 해시 레프트 조인(12, 15) | [340.998, 790.399] | 117191170 | 117191170 | | [39MB, 39MB] | 27MB(10015MB) | | 17 | 493224.57 

12 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) | [53.170, 79.836] | 117191170 | 117191170 | 79721 | [2MB, 2MB] | 3MB | | 41 | 412662.90 

13 | -> 벡터 파티션 반복자 | [145.450, 171.527] | 117191170 | 117191170 | | [41KB, 41KB] | 1MB | | 22 | 303514.27

14 | -> dwifin.dwi_ap_invoice s에서 분할된 CStore 스캔 | [112.099, 134.193] | 117191170 | 117191170 | | [6MB, 6MB] | 1MB | | 22 | 300641.93 

15 | -> 벡터 스트리밍(유형: PART REDISTRIBUTE PART BROADCAST) | [48.632, 99.230] | 28791678 | 28782758 | 282184 | [2MB, 2MB] | 3MB | [75,75] | 16 | 56928.04 

16 | -> 4월의 벡터 서브쿼리 스캔 | [41.916, 78.189] | 28791678 | 28782758 | | [376KB, 376KB] | 1MB | | 16 | 30826.02 

17 | -> dwifin.dwi_ap_invoice_regstns에서 CStore 스캔 | [5.233, 10.667] | 28791678 | 28782758 | | [1MB, 1MB] | 1MB | | 16 | 28004.18 

18 | -> dwrdim_dw1.dwr_dim_pur_item_category_d cate에 대한 CStore 스캔 | [12.065, 20.667] | 8228448 | 8228448 | 171426 | [2MB, 2MB] | 1MB | [104,104] | 26 | 9056.99

19 | -> 벡터 스트리밍(유형: PART LOCAL PART 방송) | [67.272, 97.378] | 15442613 | 15442566 | 321720 | [584KB, 584KB] | 2MB | [58,58] | 19 | 49578.19 

20 | -> dwrdim_dw1.dwr_dim_material_code_d 메이트의 CStore 스캔 | [18.605, 31.713] | 15442566 | 15442566 | | [1MB, 2MB] | 1MB | | 19 | 35704.02 

21 | -> dwrdim_dw1.dwr_dim_inventory_org_d inven의 CStore 스캔 | [0.378, 0.647] | 135072 | 135072 | 2814 | [1MB, 1MB] | 1MB | [53,53] | 14 | 2823.85 

술어 정보(플랜 ID로 식별됨) 

----------------------------------------- -------------------------------------------------- --------------------------------------- 

3 --벡터 해시 왼쪽 조인(4, 21 ) 

해시 조건: (tmp4.po_shipment_target_inv_org_key = inven.inventory_org_key)

4 --벡터 해시 왼쪽 조인(5, 19) 

해시 조건: (tmp4.item_id = mate.item_id) 

스큐 조인 통계에 의해 최적화됨 

5 --벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) 

스큐 필터(유형: ROUNDROBIN): ((tmp4.item_id = (-999999)::numeric) OR (tmp4.item_id IS NULL)) 

6 -- 벡터 해시 왼쪽 결합(7, 18) 

해시 조건: (tmp4.item_category_key = cate.pur_item_catg_key) 

7 -- Vector Hash Left Join (8, 10) 

Hash Cond: (tmp4.ap_invoice_id = s.ap_invoice_id) 

통계에 의해 최적화된 Skew Join 

8 --벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) 

Skew 필터(유형: ROUNDROBIN): (tmp4. ap_invoice_id = 1001113812002::숫자)

10 --Vector Streaming(type: PART REDISTRIBUTE PART BROADCAST ng: LC_DL1->LC_DW1) 

Skew Filter(type: BROADCAST): (s.ap_invoice_id = 1001113812002::numeric) 

11 --Vector Hash Left Join (12, 15) 

Hash Cond: ((('6600'::text || (s.attribute1)::text)) = ((numeric_out(apr.ap_invoice_regstn_id))::character variable)::text) Skew Join Optimized by Hint 

12 

-- 벡터 스트리밍(유형: PART REDISTRIBUTE PART ROUNDROBIN) 

왜곡 필터(유형: ROUNDROBIN): ((('6600'::text || (s.attribute1)::text)) = '6600'::text) 

13 -- 벡터 파티션 반복기 

반복: 147 14 --dwifin.dwi_ap_invoice s 
파티션에서 정적 가지치기로 선택한 파티션 

CStore 스캔 : 1..147 
15 --벡터 스트리밍(유형:부분 재배포 부분 방송)



스큐 필터(유형: BROADCAST): ((((숫자_out(apr.ap_invoice_regstn_id))::문자 가변)::텍스트) = '6600'::텍스트) 18 --dwrdim_dw1.dwr_dim_pur_item_category_d 필터에서 CStore 스캔: 

( 

( cate.del_flag)::text = 'N'::text) 

푸시다운 술어 필터: ((cate.del_flag)::text = 'N'::text) 

19 --벡터 스트리밍(유형: PART LOCAL PART BROADCAST) 

스큐 Filter(type: BROADCAST): (mate.item_id = (-999999)::numeric) 

20 --dwrdim_dw1.dwr_dim_material_code_d 메이트 필터에 CStore 스캔 

: ((mate.del_flag)::text = 'N'::text) 

푸시다운 술어 필터: ((mate.del_flag)::text = 'N'::text) 

21 --dwrdim_dw1.dwr_dim_inventory_org_d inven 

필터에서 CStore 스캔: ((inven.del_flag)::text = 'N'::text)

푸시다운 술어 필터: ((inven.del_flag)::text = 'N'::text)

처음으로 Huawei Cloud의 새로운 기술에 대해 알아보고 팔로우하려면 클릭하세요~

MyBatis-Flex 표절에 대한 해명 MyBatis-Plus Arc 브라우저 공식 출시 1.0, Chrome 대체 OpenAI 공식 출시 Android 버전 ChatGPT VS Code 최적화 이름 난독화 압축, 내장 JS 20% 감소! LK-99: 최초의 실온 및 압력 초전도체? 머스크는 "제로위안으로 구입"하고 @x 트위터 계정을 털었다. 파이썬 운영위원회는 PEP 703 제안을 받아들여 글로벌 인터프리터 잠금을 선택 사항으로 만들 계획이다 .시스템의 오픈 소스 및 무료 패킷 캡처 소프트웨어 방문 횟수 스택 오버플로 크게 떨어졌고 Musk는 LLM으로 대체되었다고 말했습니다.
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/4526289/blog/10092215