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