この記事は、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 の発売を計画