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 オン
( T.PERIOD_ID = 202308 かつ存在しません
(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 から 1 を選択します))
一致したら、SET 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    
 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_ft でマージ
        マージ更新日: 17948
  4 --ハッシュアンチ結合 (5, 6)
        ハッシュ演算子: (((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.アカウントコード)::テキスト = (CASE WHEN ((t2.アカウント番号)::テキスト = 'ALL'::テキスト) THEN t1.アカウントコード ELSE t2.アカウント番号 END)::テキスト))
        結合フィルターによって削除された行: 119
  8 -- t2 でのサブクエリ スキャン
        フィルター: (t2.rownumber = 1)

                   メモリ情報(プランIDで識別)                    
-------------------------------------------------- -----------------------------
  1 -- fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ft でマージ
        ピークメモリ: 74KB、推定メモリ: 2048MB
  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 バッチ: 1 メモリ使用量: 1kB
  7 --ハッシュ右結合 (8, 14)
        ピークメモリ: 32KB、推定メモリ: 2048MB
  8 -- t2 でのサブクエリ スキャン
        ピークメモリ: 32KB、推定メモリ: 2048MB
  9 --ウィンドウアグ
        ピークメモリ: 64KB、推定メモリ: 2048MB
 10 --並べ替え
        ピークメモリ: 72KB、推定メモリ: 2048MB
 11 --サブクエリスキャン
        ピークメモリ: 64KB、推定メモリ: 2048MB
 12 --ハッシュ集約
        ピークメモリ: 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_act.rt_act_apd_npd_rmk_sto_his_dtl_ft でマージ
        ノード/s: すべてのデータノード
        リモート クエリ: UPDATE ONLY fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t SET seq_id = $47、batch_number = $48、approved_status = $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、pt d_tb = $68、dif_ptd = $69、account_code = $70、schedule_end_time = $71、remark = $72、status = $73、status_name = $74、例外タイプ = $75、例外タイプ名 = $76、approved_by = $77、approve_comment = $78、approve_date = $79、unique_id = $80、created_by = $81、 Creation_date = $82、last_updated_by = $83、last_update_date = $84、last_update_login = $85、error_message_cn = $86、error_message_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'::文字の変化(1)
  4 --ハッシュアンチ結合 (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.スケジュール終了時刻、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.スケジュール終了時刻、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::数値
  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 --ウィンドウアグ
        出力: 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.口座番号
        ソートキー: 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.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 --ハッシュ集約
        出力: 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
        ノード/s: すべてのデータノード
        リモート クエリ: 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 --apd_npd_rmk_to_sto_tmp「_REMOTE_TABLE_QUERY_」でのデータ ノード スキャン
        出力: t1.ssc_code、t1.company_code、t1.account_code、t1.period_id、t1.unique_id
        ノード/s: すべてのデータノード
        リモートクエリ: SELECT ssc_code、company_code、account_code、period_id、unique_id FROM ONLY fin_drt_act.apd_npd_rmk_to_sto_tmp t1 WHERE true

                         データノード情報 (プラン 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 -- ネストされたループ (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 --ハッシュアンチ結合 (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 --ウィンドウアグ
        (実際の時間 = 6.741..6.862 行 = 198 ループ = 1) (投影時間 = 0.016)
        (バッファ: 共有ヒット = 6)
        (CPU: ex c/r=1848、ex row=198、ex cyc=366028、inc cyc=17840270)
 10 --並べ替え
        (実際の時間=6.716..6.730行=198ループ=1)
        (バッファ: 共有ヒット = 6)
        (CPU: ex c/r=14173、ex row=198、ex cyc=2806302、inc cyc=17474242)
 11 --サブクエリスキャン
        (実際の時間=5.524..5.650 行=198 ループ=1) (投影時間=0.067)
        (CPU: ex c/r=1406、ex row=198、ex cyc=278492、inc cyc=14667940)
 12 --ハッシュ集約
        (実際の時間=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.261 ミリ秒

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

fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f T にマージします。
(SELECT 'Y' del_flag) S オン
( T.PERIOD_ID = 202308 かつ存在しません
(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 から 1 を選択します))
一致したら、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::numeric)
 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.アカウントコード)::テキスト = (CASE WHEN ((t2.アカウント番号)::テキスト = 'ALL'::テキスト) THEN t1.アカウントコード ELSE t2.アカウント番号 END)::テキスト))
 12 --t2 でのベクトル サブクエリ スキャン
        フィルター: (t2.rownumber = 1)
 17 -- ベクトルソニックハッシュ集合体
        統計によって最適化されたスキュー集計
 19 --CStore スキャン (fin_drt_act.rt_act_mca_dc_user_privilege_dtl_ft1)
        フィルター: (((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) タイムゾーンなし))
 20 -- ベクトル パーティション イテレータ
        反復回数: 120
 21 --fin_drt_act.apd_npd_rmk_to_sto_tmp t1 でのパーティション化された CStore スキャン
        静的プルーンによって選択されたパーティション: 1..120

                                                                                                                                                                                                                                                                                                                                                                                                  ターゲットリスト情報 (プラン ID で識別)                                                                                                                                                                                                                                                                                                                                                                                                  
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------
  2 -- ベクター ストリーミング (タイプ: GATHER)
        ノード/s: すべてのデータノード
  4 -- ベクトル ハッシュ アンチ結合 (5, 9)
        出力: ('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'::テキスト
  7 --結果
        出力: 'Y'::テキスト
  8 --CStore スキャン (fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_ft)
        出力: 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.スケジュール終了時刻、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 --ベクターストリーミング(タイプ:ブロードキャスト)
        出力: 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 --ベクターストリーミング(タイプ:ブロードキャスト)
        出力: 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 -- ベクトル ウィンドウ集約
        出力: 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.口座番号
        ソートキー: 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 --ベクターストリーミング(タイプ: 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.口座番号
        キーの配布: t.ssc_code
        スポーン先: すべてのデータノード
        コンシューマ ノード: すべてのデータノード
 16 --ベクターサブクエリスキャンオン
        出力: 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 --ベクターストリーミング(タイプ: 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_ft1)
        出力: 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 t1 でのパーティション化された CStore スキャン
        出力: 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
рекомендация