GaussDB (DWS) の実践例丨MERGE シナリオでステートメントがプッシュダウンされないことによって引き起こされるパフォーマンスのボトルネック問題

この記事は、Huawei Cloud Community GaussDB (DWS) Performance Tuning: A Case Study of Performance Bottleneck Questions Caused by Not Pushing Down States in MERGE Scenarios」(著者: O Paoguolai~) から共有されたものです。

1. 【問題の説明】

ステートメントの実行時間が長すぎるため、ステートメントのパフォーマンス実行プランの SQL 診断情報に、SQL ステートメントがプッシュダウンされていないことが示されています。理由は次のとおりです。実テーブルではないデュアルのレコードのタイプを使用できません。出荷される。

2. 【原文】

fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f T にマージします
(SELECT 'Y' del_flag FROM DUAL) S on 
( T.PERIOD_ID = 202308 AND NOT EXISTS 
(SELECT 1 FROM FIN_DRT_ACT.RT_ACT_APD_NPD_RMK_TO_STO_V S WHERE T.UNIQUE_) ID = S.UNIQUE_ID および T.PERIOD_ID = S. PERIOD_ID ))
一致した場合に設定を更新 T.del_flag=S.del_flag

3. 【性能分析】

以前の SQL ステートメントのパフォーマンス実行計画を書き直す

ID | 操作 | エータイム | あ行 | E行 | E 特有 | ピークメモリ | A幅 | E幅 | 電子コスト
----+------------------------------------------ -------------------------------------------------- ----+-----------+----------+---------- +-----------+---------------+-----------+---------+-- ------- 
  1 | -> fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ft でマージ | 806911.617 | 17948 | 17140 | | 74KB | | 498 | 501.74   
  2 | -> ネストされたループ (3,4) | 3795.279 | 17948 | 17140 | | 66KB | | 498 | 501.74   
  3 | -> 結果 | 0.003 | 1 | 1 | | 24KB | | 0 | 0.01     
  4 | -> ハッシュアンチ結合 (5, 6) | 3741.930 | 17948 | 17140 | | 56KB | | 498 | 330.32   
  5 | -> rt_act_apd_npd_rmk_sto_his_dtl_f "_REMOTE_TABLE_QUERY_" でのデータ ノード スキャン | 3291.507 | 17948 | 17400 | | 24832KB | | 498 | 0.00     
  6 | -> ハッシュ | 384.317 | 7 | 261 | | 320KB | | 554 | 54.23    
  7 | -> ハッシュ右結合 (8, 14) | 384.287 | 7 | 261 | | 32KB | | 554 | 54.23    
  8 | -> t2 でのサブクエリ スキャン | 6.915 | 198 | 236 | | 32KB | | 18 | 26.41    
  9 | -> ウィンドウ集約 | 6.862 | 198 | 236 | | 64KB | | 18 | 23.46    
 10 | -> 並べ替え | 6.730 | 198 | 236 | | 72KB | | 18 | 16.97    
 11 | -> サブクエリスキャンオン | 5.650 | 198 | 236 | | 64KB | | 18 | 7.08    
 12 | -> ハッシュ集約 | 5.535 | 198 | 236 | | 104KB | | 28 | 4.72    
        マージ ピーク メモリ: 74KB、推定メモリ:
 13 | -> rt_act_mca_dc_user_privilege_dtl_f "_REMOTE_TABLE_QUERY_" でのデータ ノード スキャン | 5.378 | 198 | 236 | | 64KB | | 28 | 0.00     
 14 | -> ハッシュ | 377.009 | 7 | 260 | | 312KB | | 2102 | 0.00     
 15 | -> apd_npd_rmk_to_sto_tmp "_REMOTE_TABLE_QUERY_" でのデータ ノード スキャン | 376.991 | 7 | 260 | | 64KB | | 2102 | 0.00     

                        SQL 診断情報                         
-------------------------------------- ------------------------ 
SQL は計画出荷ではない
	理由: 実テーブルではないデュアルのレコードのタイプは使用できません出荷される

                                                                                                                            述語情報 (プラン ID によって識別される)                                                                                                                              
-------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---- 
  1 --fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t で
        マージ更新: 17948 
  4 --ハッシュ アンチ結合 (5, 6)
        ハッシュ Cond: (((t.unique_id)::text = ((t1.period_id):: text || (t1.unique_id)::text)) AND (t.period_id = (t1.period_id)::numeric)) 
  7 --ハッシュ右結合 (8, 14)
        ハッシュ条件: ((t2.ssc_code): :text = (t1.ssc_code)::text)
        結合フィルタ: (((t1.company_code)::text = (CASE WHEN ((t2.company_code)::text = 'ALL'::text) THEN t1.company_code ELSE t2.company_code END)::text) AND ((t1.account_code)::text = (CASE WHEN ((t2.account_number)::text = 'ALL'::text) THEN t1.account_code ELSE t2.account_number END )::text))
        結合フィルターによって削除された行: 119 
  8 --t2
        フィルターでのサブクエリ スキャン: (t2.rownumber = 1)

                   メモリ情報 (プラン ID で識別)                     
------------- -------------------------------------------------- ------------------ 
  1 --fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ft でマージ
  2 --ネストされたループ (3,4)
        ピーク メモリ: 66KB、推定メモリ: 2048MB 
  3 --結果
        ピーク メモリ: 24KB、推定メモリ: 2048MB 
  4 -- ハッシュ アンチ ジョイン (5、6)
        ピーク メモリ: 56KB、推定メモリ: 2048MB 
  5 -- rt_act_apd_npd_rmk_sto_his_dtl_f "_REMOTE_TABLE_QUERY_" でのデータ ノード スキャン ピーク
        メモリ: 24832KB、推定メモリ: 2048MB 
  6 -- ハッシュ
        ピーク メモリ: 320KB、幅: 56
        バケット: 32768 Batチェス: 1 メモリ使用量: 1kB 
  7 --ハッシュ右結合 (8、14)
        ピーク メモリ: 32KB、推定メモリ: 2048MB 
  8 -- t2 でのサブクエリ スキャン
        ピーク メモリ: 32KB、推定メモリ: 2048MB 
  9 --WindowAgg
        ピーク メモリ: 64KB、推定メモリ: 2048MB 
 10 --ソート
        ピーク メモリ:72KB、推定メモリ:2048MB 
 11 --サブクエリ スキャン ピーク
        メモリ:64KB、推定メモリ:2048MB 
 12 --HashAggregate
        ピーク メモリ:104KB、推定メモリ:2048MB 
 13 --rt_act_mca_dc_user_privilege_dtl_f でのデータ ノード スキャン「_REMOTE_TABLE_QUERY_」
        ピーク メモリ: 64KB、推定メモリ: 2048MB 
 14 --ハッシュ
        ピーク メモリ: 312KB、幅: 76
        バケット: 32768 バッチ: 1 メモリ使用量: 1kB 
 15 -- apd_npd_rmk_to_sto_tmp でのデータ ノード スキャン 「_REMOTE_TABLE_QUERY_」
        ピーク メモリ: 64KB、推定メモリ: 2048MB

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ターゲットリスト情報 (プラン ID で識別)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------- 
  1- fin_drt.rt.rt_act_apd_npd_rmk_sto_his_dtl_f 
        F node/s:すべてのDataNodes
        リモートクエリ:fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ff t seq_id = $ 47 49ドル、reference_id = $50、enabled_flag = $51、operate_flag = $52、original_period = $53、carry_flag = $54、account_period_id = $55、period_id = $56、ssc_code = $57、ssc_cn_name = $58、ssc_en_name = $59、company_code = $60、source_name = $61、ic = $62、lc_dr_amt_je = $63、lc_cr_amt_je = $64、ptd_je = $65、lc_dr_tb = $66、lc_cr_tb = $67、ptd_tb = $68、dif_ptd = $69、account_code = $70、schedule_end_time = $71、remark = $72、status = $73、status_name = 74ドル、例外タイプ = $75、例外タイプ名 = $76、承認済み_バイ = $77、承認コメント = $78、承認日付 = $79、ユニーク_ID = $80、作成日 = $81、作成日 = $82、最終更新日 = $83、最終更新日付 = $84、最終更新ログイン = $85、エラーメッセージ_cn = $86、エラーメッセージ_en = $87、del_flag = $88 WHERE t.ctid = $44 AND t.xc_node_id = $45 AND t.tableoid = $46 
  2 -- ネストされたループ (3,4)
        出力: 'Y'::text、t.seq_id、t.batch_number、t.approved_status、t.reference_id、t.enabled_flag、t.operate_flag、t.original_period、t.carry_flag、t.account_period_id、t.period_id、t .ssc_code、t.ssc_cn_name、t.ssc_en_name、t.company_code、t.source_name、t.ic、t.lc_dr_amt_je、t.lc_cr_amt_je、t.ptd_je、t.lc_dr_tb、t.lc_cr_tb、t.ptd_tb、t.dif_ptd 、t.account_code、t.schedule_end_time、t.remark、t.status、t.status_name、t.例外タイプ、t.例外タイプ名、t.approved_by、t.approve_comment、t.approve_date、t.unique_id、t.created_by、t .creation_date、t.last_updated_by、t.last_update_date、t.last_update_login、t.error_message_cn、t.error_message_en、t.del_flag、t.ctid、t.xc_node_id、t.tableoid、t.seq_id、t.batch_number、t.approved_status 、t.reference_id、t.enabled_flag、t.operate_flag、t.original_period、t.carry_flag、t.account_period_id、t.period_id、t.ssc_code、t.ssc_cn_name、t.ssc_en_name、t.company_code、t.source_name、t .ic、t.lc_dr_amt_je、t.lc_cr_amt_je、t.ptd_je、t.lc_dr_tb、t.lc_cr_tb、t.ptd_tb、t.dif_ptd、t.account_code、t.schedule_end_time、t.remark、t.status、t.status_name 、t.例外タイプ、t.例外タイプ名、t.approved_by、t.approve_comment、t.approve_date、t.unique_id、t.created_by、t.creation_date、t.last_updated_by、t.last_update_date、t.last_update_login、t.error_message_cn、t .error_message_en, 'Y'::charactervariing(1) 
  4 --Hash Anti Join (5, 6)
        出力: t.seq_id、t.batch_number、t.approved_status、t.reference_id、t.enabled_flag、t.operate_flag、 t.original_period、t.carry_flag、t.account_period_id、t.period_id、t.ssc_code、t.ssc_cn_name、t.ssc_en_name、t.company_code、t.source_name、t.ic、t.lc_dr_amt_je、t.lc_cr_amt_je、t. ptd_je、t.lc_dr_tb、t.lc_cr_tb、t.ptd_tb、t.dif_ptd、t.account_code、t.schedule_end_time、t.remark、t.status、t.status_name、t.例外タイプ、t.例外タイプ名、t.approved_by、 t.approve_comment、t.approve_date、t.unique_id、t.created_by、t.creation_date、t.last_updated_by、t.last_update_date、t.last_update_login、t.error_message_cn、t.error_message_en、t.del_flag、t.ctid、t. xc_node_id、t.tableoid 
  5 -- rt_act_apd_npd_rmk_sto_his_dtl_f "_REMOTE_TABLE_QUERY_" でのデータ ノード スキャン 出力
        : t.seq_id、t.batch_number、t.approved_status、t.reference_id、t.enabled_flag、t.operate_flag、t.original_period 、t.carry_flag、 t.account_period_id、t.period_id、t.ssc_code、t.ssc_cn_name、t.ssc_en_name、t.company_code、t.source_name、t.ic、t.lc_dr_amt_je、t.lc_cr_amt_je、t.ptd_je、t.lc_dr_tb、t. lc_cr_tb、t.ptd_tb、t.dif_ptd、t.account_code、t.schedule_end_time、t.remark、t.status、t.status_name、t.例外タイプ、t.例外タイプ名、t.approved_by、t.approve_comment、t.approve_date、 t.unique_id、t.created_by、t.creation_date、t.last_updated_by、t.last_update_date、t.last_update_login、t.error_message_cn、t.error_message_en、t.del_flag、t.ctid、t.xc_node_id、t.tableoid
        ノード/s : すべてのデータノード
        リモート クエリ: SELECT seq_id、batch_number、approved_status、reference_id、enabled_flag、operate_flag、original_period、carry_flag、account_period_id、period_id、ssc_code、ssc_cn_name、ssc_en_name、company_code、source_name、ic、lc_dr_amt_je、lc_cr_amt_je、ptd_je、lc_dr_t b、lc_cr_tb、ptd_tb、dif_ptd、 account_code、schedule_end_time、remark、status、status_name、例外タイプ、例外タイプ名、approved_by、approve_comment、approve_date、unique_id、created_by、creation_date、last_updated_by、last_update_date、last_update_login、error_message_cn、error_message_en、del_flag、ctid、xc_node_id、tableoid FROM ONLY fin_drt_act.rt _act_apd_npd_rmk_sto_his_dtl_f t どこperiod_id = 202308::numeric 
  6 --ハッシュ
        出力: t1.period_id、t1.unique_id 
  7 --ハッシュ右結合 (8、14)
        出力: t1.period_id、t1.unique_id 
  8 --t2 のサブクエリ スキャン
        出力: t2。 ssc_code、t2.company_code、t2.account_number、t2.level_key、t2.rownumber 
  9 --WindowAgg
        出力: t.ssc_code、t.company_code、t.account_number、(CASE WHEN (((t.company_code)::text = ' ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND (( t.account_number)::text = 'ALL'::text)) THEN 1 ELSE 2 END)、dense_rank() OVER (PARTITION BY t.ssc_code ORDER BY (CASE WHEN (((t.company_code)::text = ' ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND (( t.account_number)::text = 'ALL'::text)) THEN 1 ELSE 2 END) USING = NULLS LAST) 
 10 --ソート
        出力: t.ssc_code, (CASE WHEN (((t.company_code)::text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 1 ELSE 2 END), t.company_code, t.account_number
        ソートキー: t.ssc_code, (CASE WHEN (((t.company_code): :text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text ) AND ((t.account_number)::text = 'ALL'::text)) THEN 1 ELSE 2 END) 
 11 --サブクエリ スキャン t
        出力: t.ssc_code, CASE WHEN (((t.company_code):: text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 1 ELSE 2 END、t.company_code、t.account_number 
 12 --HashAggregate
        出力: t1.ssc_code、t1.company_code、t1.account_number、 t1.user_id
        キーによるグループ化: t1.ssc_code、t1.company_code、t1.account_number、t1。user_id 
 13 --rt_act_mca_dc_user_privilege_dtl_f "_REMOTE_TABLE_QUERY_" でのデータ ノード スキャン
        出力: t1.ssc_code、t1.company_code、t1.account_number、t1.user_id
        ノード: すべてのデータノード
        リモート クエリ: SELECT ssc_code、company_code、account_number、user_id FROM ONLY fin_drt_act.rt_act_mca_dc_user_privilege_dtl_f t1 WHERE flow_type::text = 'EC_GL'::text AND chek_type::text = 'EC_GL_STO'::text AND begin_date <= pg_systimestamp():: timestamp(0) タイムゾーンなし AND end_date >= pg_systimestamp()::timestamp(0) タイムゾーンなし
 14 --ハッシュ
        出力: t1.ssc_code、t1.company_code、t1.account_code、t1.period_id、t1.unique_id 
 15 - -DataノードAPD_NPD_RMK_TO_STO_TMP "_REMOTE_TABLE_QUERY_"
        出力:T1.SSC_CODE、T1.COMPANY_CODE、T1.ACCOUNT_CODE、T1.PERIOD_ID、T1.UNIQUE_ID 
        NODE/S:ALL DATANODES LERIOM_CODE、
        SCADES、CODE、CODE、CODE、CODE、CODE、ACTANODE unique_id from ONLY fin_drt_act.apd_npd_rmk_to_sto_tmp t1 WHERE 真の

                         データノード情報 (プラン ID によって識別される)                           
----------------------------------- -------------------------------------------------- ---------- 
  1 --fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ft でマージ
        (実際の時間=806911.616..806911.617 行=17948 ループ=1) 
        (バッファ: 共有ヒット=6) 
        (CPU: ex c/r= 116340958、ex row=17948、ex cyc=2088087526316、inc cyc=2097953048602) 
  2 --Nested Loop (3,4) 
        (実際の時間=561.052..3795.279 行=17948 ループ=1) (投影時間=23.340) 
        (CPU) : ex c/r=7752、ex row=17949、ex cyc=139143070、inc cyc=9865522286) 
  3 --結果
        (実際の時間=0.001..0.003 行=1 ループ=1) (投影時間=0.001) 
        (CPU : ex c/r=4680、ex row=1、ex cyc=4680、inc cyc=4680) 4 
  --Hash Anti Join (5, 6) 
        (実際の時間=561.044..3741.930 行=17948 ループ=1) (投影時間=7.143) 
        (バッファ: 共有ヒット=6) 
        (CPU: ex c/r=9584、ex row=17955、ex cyc=172088156、inc cyc=9726374536) 5 -- rt_act_apd_npd_rmk_sto_his_dtl_f "_REMOTE_TABLE_QUERY_ 
  " 
        (実際の時間=176.472..3291.507 行=17948 ループ=1) 
        (バッファ: 0) 
        (CPU: ex c/r=476658、ex row=17948、ex cyc=8555072428、inc cyc=8555072428) 
  6 --ハッシュ
        (実際時間=384.317..384.317 行=7 ループ=1) 
        (バッファ: 共有ヒット=6) 
        (CPU: ex c/r=10954、ex row=7、ex cyc=76680、inc cyc=999213952) 
  7 --ハッシュ右結合 (8, 14) 
        (実際の時間 = 384.028..384.287 行 = 7 ループ = 1) (フィルター時間 = 0.043 投影時間 = 0.000) 
        (バッファー: 共有ヒット = 6) 
        (CPU: ex c/r=4613、 ex row=205、ex cyc=945852、inc cyc=999137272)  
  8 -- t2 でのサブクエリ スキャン
        (実際の時間=6.751..6.915 行=198 ループ=1) (フィルター時間=0.018) 
        (CPU: ex c/r=682、ex row=198、ex cyc=135038、inc cyc=17975308) 
  9 --WindowAgg 
        (実際の時間 = 6.741..6.862 行 = 198 ループ = 1) (投影時間 = 0.016) 
        (バッファー: 共有ヒット = 6) 
        (CPU: ex c/r=1848、ex row=198、ex cyc=366028、inc) cyc=17840270) 
 10 --Sort 
        (実際の時間=6.716..6.730 行=198 ループ=1) 
        (バッファ: 共有ヒット=6) 
        (CPU: ex c/r=14173、ex row=198、ex cyc=2806302 、inc cyc=17474242) 
 11 --Subquery Scan on t 
        (実際の時間=5.524..5.650 行=198 ループ=1) (投影時間=0.067) 
        (CPU: ex c/r=1406、ex row=198、ex cyc=278492, inc cyc=14667940) 
 12 --HashAggregate 
        (実際の時間=5.490..5.535 行=198 ループ=1) (投影時間=0.003) 
        (バッファ: 0) 
        (CPU: ex c/r=2111, ex row=198、ex cyc=418106、inc cyc=14389448) 
 13 --rt_act_mca_dc_user_privilege_dtl_f "_REMOTE_TABLE_QUERY_" でのデータ ノード スキャン
        (実際の時間=2.249..5.378 行=198 ループ=1) 
        (バッファ: 0) 
        (CPU: ex c /r=70562, ex row=198, ex cyc=13971342, inc cyc=13971342) 
 14 --ハッシュ
        (実際の時間=377.009..377.009 行=7 ループ=1) 
        (バッファ: 0) 
        (CPU: ex c/ r=8018、ex row=7、ex cyc=56128、inc cyc=980216112) 
 15 --apd_npd_rmk_to_sto_tmp でのデータ ノード スキャン "_REMOTE_TABLE_QUERY_" 
        (実際の時間 = 128.393..376.991 行 = 7 ループ = 1) 
        (バッファー: 0) 
        (CPU: ex c/r=140022854、ex row=7、ex cyc=980159984、inc cyc=980159984) 

                 ====== クエリの概要 =====                   
------------ -----------------------------------------------
リモートクエリ ポーリング時間: 169.602 ミリ秒、デシリアル化時間: 7.760 ミリ秒
リモート クエリ ポーリング時間: 4.858 ミリ秒、デシリアル化時間: 0.006 ミリ秒
リモート クエリ ポーリング時間: 319.716 ミリ秒、デシリアル化時間: 0.000 ミリ秒 エンキュー時間: 0.034 ミリ
コーディネータ エグゼキュータ開始時間: 0.551 ミリ秒
コーディネーター実行時間: 806912.768 ミリ秒
コーディネーター実行時間: 17.822 ミリ秒
パーサー実行時間: 0.000 ミリ秒
プランナー実行時間: 4.840 ミリ秒
クエリ ID: 83598068858005619
一意の SQL ID: 4289851310
合計実行時間: 806936.2 61ミリ秒

ビジネスで使用する場合、MERGE INTOステートメントはUPSERTと同様の機能を実装するために使用されますこのシナリオでは、MERGE INTO ステートメントの USING 部分のデータは VALUES 句ですが、USING 部分の記述方法によっては、MERGE INTO ステートメントの実行がプッシュダウンされない可能性があります
この記事の SQL 文では、プッシュダウンしない理由は二重テーブルであることと、そのテーブルが VALUES 句で使用されていないことがわかるため、SQL 全体が一致するように USING 句の SQL 文を書き換えます。ステートメントはプッシュダウンできます。
ステートメントを書き直す


(SELECT 'Y' del_flag) S on 
( T.PERIOD_ID = 202308 AND NOT EXISTS 
(SELECT 1 FROM FIN_DRT_ACT.RT_ACT_APD_NPD_RMK_TO_STO_V S WHERE T.UNIQUE_ID = S.UNI) を使用して fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f T にマージしますQUE_ID および T.PERIOD_ID = S.PERIOD_ID ) )
一致した場合は、SET T.del_flag=S.del_flag を更新します

書き換えられたステートメントの詳細な実行プラン

ID | 操作 | E行 | E 特有 | Eメモリー | E幅 | 電子コスト
----+------------------------------------------ -------------------------------------------------- --------+--------+---------------+---------- ---+--------+--------- 
  1 | -> 行アダプター | 1 | | | 572 | 2838.74 
  2 | -> ベクターストリーミング (タイプ: GATHER) | 1 | | | 572 | 2838.74 
  3 | -> fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ft でのベクトル マージ | 17592 | | 48MB | 572 | 2834.97 
  4 | -> ベクトル ハッシュ アンチ結合 (5, 9) | 17592 | | 16MB | 572 | 2834.97 
  5 | -> ベクトルネストループ (6,8) | 17852 | 686 | 1MB | 532 | 1873.40 
  6 | -> ベクトルアダプター | 26 | | 1MB | 0 | 0.01     
  7 | -> 結果 | 26 | | 1MB | 0 | 0.01     
  8 | -> fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ft での CStore スキャン | 17852 | | 1MB | 500 | 1866.51 
  9 | -> ベクターストリーミング(種類:ブロードキャスト) | 6838 | 52 | 2MB | 594 | 947.28   
 10 | -> ベクトル ハッシュ右結合 (11, 20) | 263 | | 16MB | 594 | 706.57   
 11 | -> ベクターストリーミング(種類:ブロードキャスト) | 6162 | 47 | 2MB | 30 | 674.47   
 12 | -> t2 でのベクトル サブクエリ スキャン | 237 | | 1MB | 30 | 631.14   
 13 | -> ベクトル WindowAgg | 237 | | 16MB | 18 | 631.03   
 14 | -> ベクトルの並べ替え | 237 | | 16MB | 18 | 630.56  
 15 | -> ベクターストリーミング(種類: REDISTRIBUTE) | 234 | | 2MB | 18 | 629.85  
        スキュー集計 統計により最適化
 16 | -> t 上のベクトルサブクエリスキャン | 234 | | 1MB | 18 | 629.51   
 17 | -> ベクトルソニックハッシュ集合体 | 234 | | 16MB | 28 | 629.42   
 18 | -> ベクターストリーミング(種類: REDISTRIBUTE) | 236 | | 2MB | 28 | 629.24   
 19 | -> fin_drt_act.rt_act_mca_dc_user_privilege_dtl_ft1 での CStore スキャン | 236 | | 1MB | 28 | 628.94   
 20 | -> ベクトル パーティション イテレータ | 260 | 30 | 1MB | 2112 | 30.03    
 21 | -> fin_drt_act.apd_npd_rmk_to_sto_tmp t1 でのパーティション化された CStore スキャン | 260 | | 1MB | 2112 | 30.03   

                                                                                                                            述語情報 (プラン ID で識別)                                                                                                                              
-------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --- 
  4 --ベクター ハッシュ アンチ結合 (5, 9)
        ハッシュ条件: (((t.unique_id)::text = ((t1.period_id)::text || (t1.unique_id)::text)) AND (t.period_id = (t1.period_id)::numeric)) 
  8 --CStore fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ft のスキャン フィルタ
        : (t.period_id = 202308::numeric)
        プッシュダウン述語フィルタ: (t.period_id = 202308::数値) 
 10 --ベクトル ハッシュ右結合 (11, 20)
        ハッシュ条件: ((t2.ssc_code)::text = (t1.ssc_code)::text)
        結合フィルター: (((t1.company_code)::text = (CASE WHEN ((t2.company_code)::text = 'ALL'::text) THEN t1.company_code ELSE t2.company_code END)::text) AND ((t1.account_code)::text = (CASE WHEN (( t2.account_number)::text = 'ALL'::text) THEN t1.account_code ELSE t2.account_number END)::text)) 
 12 --t2 フィルターでのベクター サブクエリ スキャン
        : (t2.rownumber = 1) 
 17 -- Vector Sonic Hash Aggregate
 19 --CStore fin_drt_act.rt_act_mca_dc_user_privilege_dtl_ft1
  4 -- ベクトル ハッシュ アンチ結合 (5, 9)
        フィルター: (((t1.flow_type)::text = 'EC_GL'::text) AND ((t1.chek_type)::text = 'EC_GL_STO'::text) AND (t1.begin_date <= (pg_systimestamp()) ::timestamp(0) タイムゾーンなし) AND (t1.end_date >= (pg_systimestamp())::timestamp(0) タイムゾーンなし))
        プッシュダウン述語フィルター: (((t1.flow_type)::text = 'EC_GL '::text) AND ((t1.chek_type)::text = 'EC_GL_STO'::text) AND (t1.begin_date <= (pg_systimestamp())::timestamp(0) タイムゾーンなし) AND (t1.end_date >= (pg_systimestamp())::timestamp(0) without timezone)) 
 20 --Vector Partition Iterator 
        Iterations: 120 
 21 --Partitioned CStore Scan on fin_drt_act.apd_npd_rmk_to_sto_tmp t1 
        Partitions Selected by Static Prune: 1..120

                                                                                                                                                                                                                                                                                                                                                                                                  ターゲットリスト情報(プランIDで識別)                                                                                                                                                                                                                                                                                                                                                                                                   
-------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------ 
  2 --Vector Streaming (タイプ: GATHER)
        ノード: すべてのデータノード
        出力: ('Y'::text)、t.seq_id、t.batch_number、t.approved_status、t.reference_id、t.enabled_flag、t.operate_flag、t.original_period、t.carry_flag、t.account_period_id、t.period_id 、t.ssc_code、t.ssc_cn_name、t.ssc_en_name、t.company_code、t.source_name、t.ic、t.lc_dr_amt_je、t.lc_cr_amt_je、t.ptd_je、t.lc_dr_tb、t.lc_cr_tb、t.ptd_tb、t .dif_ptd、t.account_code、t.schedule_end_time、t.remark、t.status、t.status_name、t.例外タイプ、t.例外タイプ名、t.approved_by、t.approve_comment、t.approve_date、t.unique_id、t.created_by 、t.creation_date、t.last_updated_by、t.last_update_date、t.last_update_login、t.error_message_cn、t.error_message_en、t.del_flag、t.ctid、t.xc_node_id、t.tableoid、('Y'::text)、 t1.ctid、t1.tableoid、t2.ssc_code、t2.company_code、t2.account_number、t2.level_key、t2.rownumber 
  5 --ベクトル ネスト ループ (6,8)
        出力: ('Y'::text)、t .seq_id、t.batch_number、t.approved_status、t.reference_id、t.enabled_flag、t.operate_flag、t.original_period、t.carry_flag、t.account_period_id、t.period_id、t.ssc_code、t.ssc_cn_name、t.ssc_en_name 、t.company_code、t.source_name、t.ic、t.lc_dr_amt_je、t.lc_cr_amt_je、t.ptd_je、t.lc_dr_tb、t.lc_cr_tb、t.ptd_tb、t.dif_ptd、t.account_code、t.schedule_end_time、t .remark、t.status、t.status_name、t.例外タイプ、t.例外タイプ名、t.approved_by、t.approve_comment、t.approve_date、t.unique_id、t.created_by、t.creation_date、t.last_updated_by、t.last_update_date 、t.last_update_login、t.error_message_cn、t.error_message_en、t.del_flag、t.ctid、t.xc_node_id、t.tableoid 
  6 --ベクトル アダプター
        出力: 'Y'::text 
  7 --
        結果出力: 'Y' ::text 
  8 --CStore fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t のスキャン 出力
        : t.seq_id、t.batch_number、t.approved_status、t.reference_id、t.enabled_flag、t.operate_flag、t.original_period、t.carry_flag、t.ac count_period_id 、t.period_id、t.ssc_code、t.ssc_cn_name、t.ssc_en_name、t.company_code、t.source_name、t.ic、t.lc_dr_amt_je、t.lc_cr_amt_je、t.ptd_je、t.lc_dr_tb、t.lc_cr_tb、t .ptd_tb、t.dif_ptd、t.account_code、t.schedule_end_time、t.remark、t.status、t.status_name、t.例外タイプ、t.例外タイプ名、t.approved_by、t.approve_comment、t.approve_date、t.unique_id 、t.created_by、t.creation_date、t.last_updated_by、t.last_update_date、t.last_update_login、t.error_message_cn、t.error_message_en、t.del_flag、t.ctid、t.xc_node_id、t.tableoid
        分散キー: t.seq_id 
  9 -- ベクター ストリーミング (タイプ: BROADCAST)
        出力: t1.ctid、t1.tableoid、t1.period_id、t1.unique_id、t2.ssc_code、t2.company_code、t2.account_number、t2.level_key、t2.rownumber
        生成場所:すべてのデータノード
        コンシューマ ノード: すべてのデータノード
 10 -- ベクトル ハッシュ右結合 (11, 20)
        出力: t1.ctid、t1.tableoid、t1.period_id、t1.unique_id、t2.ssc_code、t2.company_code、t2.account_number、t2.level_key、t2.rownumber 
 11 --ベクター ストリーミング (タイプ: BROADCAST)
        出力: t2 .ssc_code、t2.company_code、t2.account_number、t2.level_key、t2.rownumber
        生成先: すべてのデータノード
        コンシューマー ノード: すべてのデータノード
 12 -- t2 でのベクター サブクエリ スキャン
        出力: t2.ssc_code、t2.company_code、t2.account_number、 t2.level_key, t2.rownumber 
 13 --Vector WindowAgg
        出力: t.ssc_code, t.company_code, t.account_number, (CASE WHEN (((t.company_code)::text = 'ALL'::text) AND (( t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = ' ALL'::text)) THEN 1 ELSE 2 END)、dense_rank() OVER (PARTITION BY t.ssc_code ORDER BY (CASE WHEN (((t.company_code)::text = 'ALL'::text) AND (( t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = ' ALL'::text)) THEN 1 ELSE 2 END) USING = NULLS LAST) 
 14 --ベクトル ソート
        出力: t.ssc_code, (CASE WHEN (((t.company_code)::text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number):: text = 'ALL'::text)) THEN 1 ELSE 2 END), t.company_code, t.account_number
        ソートキー: t.ssc_code, (CASE WHEN (((t.company_code)::text = 'ALL':: text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number) ::text = 'ALL'::text)) THEN 1 ELSE 2 END) 
 15 --Vector Streaming(type: REDISTRIBUTE)
        出力: t.ssc_code, (CASE WHEN (((t.company_code)::text = 'ALL '::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND ((t .account_number)::text = 'ALL'::text)) THEN 1 ELSE 2 END)、t.company_code、t.account_number
        分散キー: t.ssc_code
        スポーン先: すべてのデータノード
        コンシューマ ノード: すべてのデータノード
 16 --Vector サブクエリt のスキャン 出力
        : t.ssc_code, CASE WHEN (((t.company_code)::text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 WHEN (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 1 ELSE 2 END, t.company_code, t .account_number 
 17 -- ベクトル ソニック ハッシュ集約
        出力: t1.ssc_code、t1.company_code、t1.account_number、t1.user_id
        キー別グループ: t1.ssc_code、t1.company_code、t1.account_number、t1。user_id 
 18 --Vector Streaming(type: REDISTRIBUTE)
        出力: t1.ssc_code、t1.company_code、t1.account_number、t1.user_id
        分散キー: t1.account_number
        スポーン先: すべてのデータノード
        コンシューマ ノード: すべてのデータノード
 19 --CStore fin_drt_act.rt_act_mca_dc_user_privilege_dtl_f t1 でのスキャン
        出力: t1.ssc_code、t1.company_code、t1.account_number、t1.user_id
        分散キー: t1.id 
 20 -- ベクトル パーティション イテレータ
        出力: t1.ctid、 t1.tableoid、t1.ssc_code、t1.company_code、t1.account_code、t1.period_id、t1.unique_id 
 21 --fin_drt_act.apd_npd_rmk_to_sto_tmp でのパーティション化された CStore スキャン t1
        出力: t1.ctid、t1.tableoid、t1.ssc_code、t1。 company_code、t1.account_code、t1.period_id、t1.unique_id
        分散キー: t1.row_number 

  ====== クエリの概要 =====    
------------------ -------------
システム利用可能メモリ: 2097152KB
クエリ最大メモリ: 2097152KB
クエリ推定メモリ: 131072KB
パーサー実行時間: 0.102 ミリ秒
プランナー実行時間: 4.602 ミリ秒
一意の SQL ID: 1168204269

SQL ステートメントをプッシュダウンでき、ビジネス検証後はステートメントの実行時間が 10 秒程度に短縮されていることがわかります。

クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~

 

オープンソース フレームワーク NanUI の作者がスチールの販売に切り替えたため、プロジェクトは中断されました。Apple App Store の無料リストのナンバー 1 はポルノ ソフトウェア TypeScript です。人気が出てきたばかりなのに、なぜ大手はそれを放棄し始めるのでしょうか。 ? TIOBE 10月リスト:Javaが最大の下落、C#はJavaに迫る Rust 1.73.0リリース AIガールフレンドにイギリス女王暗殺を勧められた男性に懲役9年の実刑判決 Qt 6.6正式リリース ロイター:RISC-Vテクノロジーが中米テクノロジー戦争の鍵となる 新たな戦場 RISC-V: 単一の企業や国に支配されない レノボ、Android PC の発売を計画
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4526289/blog/10115820