Caso de práctica de GaussDB (DWS) 丨 Problema de cuello de botella en el rendimiento causado por declaraciones que no se presionan en el escenario MERGE

Este artículo se comparte desde la comunidad de la nube de Huawei " Ajuste del rendimiento de GaussDB (DWS): un estudio de caso de problemas de cuello de botella en el rendimiento causados ​​por no presionar declaraciones en escenarios MERGE" , autor: O Paoguolai~.

1. [Descripción del problema]

El tiempo de ejecución de la declaración es demasiado largo y la información de diagnóstico de SQL en el plan de ejecución de rendimiento de la declaración muestra que la declaración SQL no se presiona hacia abajo. La razón es: el tipo de registro en dual que no es una tabla real no puede ser enviado.

2. [Declaración original]

fusionarse en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f T usando 
(SELECT 'Y' del_flag FROM DUAL) S en ( 
T.PERIOD_ID = 202308 Y NO EXISTE 
(SELECT 1 FROM FIN_DRT_ACT.RT_ACT_APD_NPD_RMK_TO_STO_V S WHERE T.UNIQUE_ID = S.UNIQUE _ID Y T.PERIOD_ID = S. PERIOD_ID )) 
CUANDO COINCIDE ENTONCES ACTUALIZAR SET T.del_flag=S.del_flag

3. [Análisis de rendimiento]

Reescriba el plan de ejecución de rendimiento de la declaración SQL anterior

identificación | operación | Una vez | Filas A | Filas electrónicas | E-distinto | Memoria máxima | ancho A | Ancho electrónico | Costos electrónicos 
----+------------------------------------------ -------------------------------------------------- -------------------+------------+--------+-------- +------------+-------------+---------+---------+-- ------- 
  1 | -> Fusionar en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t | 806911.617 | 17948 | 17140 | | 74 KB | | 498 | 501,74   
  2 | -> Bucle anidado (3,4) | 3795.279 | 17948 | 17140 | | 66 KB | | 498 | 501,74   
  3 | -> Resultado | 0,003 | 1 | 1 | | 24 KB | | 0 | 0,01     
  4 | -> Hash Anti unión (5, 6) | 3741.930 | 17948 | 17140 | | 56KB | | 498 | 330,32   
  5 | -> Escaneo de nodos de datos en rt_act_apd_npd_rmk_sto_his_dtl_f "_REMOTE_TABLE_QUERY_" | 3291.507 | 17948 | 17400 | | 24832 KB | | 498 | 0,00     
  6 | -> Hash | 384.317 | 7 | 261 | | 320 KB | | 554 | 54,23    
  7 | -> Unión derecha de hash (8, 14) | 384.287 | 7 | 261 | | 32 KB | | 554 | 54,23    
  8 | -> Exploración de subconsultas en t2 | 6.915 | 198 | 236 | | 32 KB | | 18 | 26,41    
  9 | -> VentanaAgg | 6.862 | 198 | 236 | | 64KB | | 18 | 23,46    
 10 | -> Ordenar | 6.730 | 198 | 236 | | 72 KB | | 18 | 16,97    
 11 | -> Exploración de subconsultas en t | 5.650 | 198 | 236 | | 64KB | | 18 | 7.08     
 12 | -> HashAggregate | 5.535 | 198 | 236 | | 104 KB | | 28 | 4.72     
 13 | -> Escaneo de nodos de datos en rt_act_mca_dc_user_privilege_dtl_f "_REMOTE_TABLE_QUERY_" | 5.378 | 198 | 236 | | 64KB | | 28 | 0,00     
 14 | -> Hash | 377.009 | 7 | 260 | | 312 KB | | 2102 | 0,00     
 15 | -> Escaneo de nodos de datos en apd_npd_rmk_to_sto_tmp "_REMOTE_TABLE_QUERY_" | 376.991 | 7 | 260 | | 64KB | | 2102 | 0.00     

                        Información de diagnóstico SQL                          
---------------------------------------------- ----------------------- 
SQL no es el motivo del envío del plan 
	: el tipo de registro en dual que no es una tabla real no puede ser enviado 

                                                                                                                            Información Predicada (identificada por ID del plan)                                                                                                                              
---------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---- 
  1 --Fusionar en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t 
        Merge Actualizado: 17948 
  4 --Hash Anti Join (5, 6) 
        Hash Cond: (((t.unique_id)::text = ((t1.period_id):: texto || (t1.unique_id)::text)) AND (t.period_id = (t1.period_id)::numeric)) 
  7 --Hash Right Join (8, 14) 
        Hash Cond: ((t2.ssc_code): :text = (t1.ssc_code)::text) 
        Filtro de unión: (((t1.company_code)::text = (CASO CUANDO ((t2.company_code)::text = 'ALL'::text) ENTONCES t1.company_code ELSE t2.company_code END)::text) AND ((t1.account_code)::text = (CASE WHEN ((t2.account_number)::text = 'ALL'::text) ENTONCES t1.account_code ELSE t2.account_number END )::text)) 
        Filas eliminadas por el filtro de unión: 119 
  8 --Escaneo de subconsultas en 
        el filtro t2: (t2.rownumber = 1) 

                   Información de la memoria (identificada por la identificación del plan)                     
------------- -------------------------------------------------- ------------------ 
  1 --Fusionar en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t 
        Memoria máxima: 74 KB, memoria estimada:
  2 --Bucle anidado (3,4)  
        Memoria máxima: 66 KB, memoria estimada: 2048 MB 
  3 --Resultado 
        Memoria máxima: 24 KB, memoria estimada: 2048 MB 
  4 --Hash Anti Join (5, 6)
        Memoria máxima: 56 KB, memoria estimada: 2048 MB 
  5 --Escaneo de nodo de datos en rt_act_apd_npd_rmk_sto_his_dtl_f "_REMOTE_TABLE_QUERY_" 
        Memoria máxima: 24832 KB, memoria estimada: 2048 MB 
  6 
        -- Memoria máxima de hash: 320 KB, ancho: 56 
        depósitos: 32768 Lotes: 1 Uso de memoria: 1 kB 
  7 --Hash Right Join (8, 14) 
        Memoria máxima: 32 KB, memoria estimada: 2048 MB 
  8 --Escaneo de subconsultas en t2 
        Memoria máxima: 32 KB, memoria estimada: 2048 MB 
  9 -- 
        Memoria máxima de WindowAgg : 64 KB, memoria estimada: 2048 MB 
 10 --Ordenación de 
        memoria máxima: 72 KB, memoria estimada: 2048 MB 
 11 --Escaneo de subconsultas en t Memoria máxima 
        : 64 KB, memoria estimada: 2048 MB 
 12 
        --Memoria máxima de HashAggregate: 104 KB, memoria estimada : 2048 MB 
 13 --Escaneo de nodo de datos en rt_act_mca_dc_user_privilege_dtl_f "_REMOTE_TABLE_QUERY_" 
        Memoria máxima: 64 KB, memoria estimada: 2048 MB 
 14 
        -- Memoria máxima de hash: 312 KB, ancho: 76 
        Depósitos: 32768 Lotes: 1 Uso de memoria: 1 kB 
 15 -- Escaneo de nodo de datos en apd_npd_rmk_to_sto_tmp "_REMOTE_TABLE_QUERY_" 
        Memoria máxima: 64 KB, memoria estimada: 2048 MB 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Información de la lista de objetivos (identificada por ID del plan)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------- 
  1 --Fusionar en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t 
        Nodo/s: Todos los nodos de datos 
        Consulta remota: SÓLO ACTUALIZACIÓN fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t SET seq_id = $47, número de lote = $48, estado_aprobado = $49 , reference_id = $50, enable_flag = $51, operator_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, código_cuenta = $70, horario_finalización = $71, comentario = $72, estado = $73, estado_ nombre = $74 , tipo_excepción = $75, nombre_tipo_excepción = $76, aprobado_por = $77, aprobar_comentario = $78, fecha_aprobación = $79, ID_único = $80, creado_por = $81, fecha_creación = $82, última_actualización_por = $83, última_fecha_actualización = $84, última_actualización_login = $85, error_message_cn = $86, mensaje_error _es = $87, del_flag = $88 DONDE t.ctid = $44 Y t.xc_node_id = $45 Y t.tableoid = $46 
  2 --Bucle anidado (3,4)
        Salida: '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.exception_type, t.exception_type_name, 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.exception_type, t.exception_type_name, 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'::carácter variable (1) 
  4 --Hash Anti Join (5, 6) 
        Salida: 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.exception_type, t.exception_type_name, 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 --Data Node Scan on rt_act_apd_npd_rmk_sto_his_dtl_f "_REMOTE_TABLE_QUERY_" 
        Output: 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.exception_type, t.exception_type_name, 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 
        Nodo/s : Todos los nodos de datos
        Consulta remota: SELECCIONAR seq_id, número de lote, estado_aprobado, id_referencia, bandera_habilitada, bandera_operación, período_original, bandera_carro, id_período_cuenta, id_período, código_ssc, nombre_ssc_cn, nombre_ssc_en_nombre, código_compañía, nombre_fuente, ic, lc_dr_amt_je, lc_cr_amt_je, ptd_je, lc_d r_tb, lc_cr_tb, ptd_tb, dif_ptd, código_cuenta, hora_final_programación, observación, estado, nombre_estado, tipo_excepción, nombre_tipo_excepción, aprobado_por, comentario_aprobación, fecha_aprobación, id_único, creado_por, fecha_creación, última_actualización_por, última_actualización_fecha, última_actualización_inicio de sesión, error_message_cn, error_message_en, del_flag, ctid, xc_node_id, tableoid DESDE SÓLO fin_drt_act. rt_act_apd_npd_rmk_sto_his_dtl_ft DONDE period_id = 202308::numeric 
  6 --Salida hash 
        : t1.period_id, t1.unique_id 
  7 --Hash Unión derecha (8, 14) 
        Salida: t1.period_id, t1.unique_id 
  8 --Escaneo de subconsulta en t2 
        Salida: t2. ssc_code, t2.company_code, t2.account_number, t2.level_key, t2.rownumber 
  9 --WindowAgg 
        Salida: t.ssc_code, t.company_code, t.account_number, (CASO CUANDO (((t.company_code)::text = ' TODOS'::texto) Y ((t.account_number)::texto = 'TODOS'::texto)) ENTONCES 0 CUANDO (((t.company_code)::texto <> 'TODOS'::texto) Y (( t.account_number)::text = 'ALL'::text)) ENTONCES 1 MÁS 2 FIN), densa_rank() SOBRE (PARTICIÓN POR t.ssc_code ORDEN POR (CASO CUANDO (((t.company_code)::text = ' TODOS'::texto) Y ((t.account_number)::texto = 'TODOS'::texto)) ENTONCES 0 CUANDO (((t.company_code)::texto <> 'TODOS'::texto) Y (( t.account_number)::text = 'ALL'::text)) ENTONCES 1 ELSE 2 END) USING = NULLS ÚLTIMO) 10 
 --Ordenar 
        salida: t.ssc_code, (CASE WHEN (((t.company_code)::text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) ENTONCES 0 CUANDO (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) ENTONCES 1 ELSE 2 END), t.company_code, t.account_number Clave de clasificación: t.ssc_code 
        , (CASO CUANDO (((t.company_code): :text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) ENTONCES 0 CUANDO (((t.company_code)::text <> 'ALL'::text ) AND ((t.account_number)::text = 'ALL'::text)) ENTONCES 1 ELSE 2 END) 
 11 --Escaneo de subconsulta en t 
        Salida: t.ssc_code, CASO CUANDO (((t.company_code):: texto = 'TODOS'::texto) AND ((t.número_cuenta)::texto = 'TODOS'::texto)) ENTONCES 0 CUANDO (((t.company_code)::texto <> 'TODOS'::texto) Y ((t.account_number)::text = 'ALL'::text)) ENTONCES 1 ELSE 2 END, t.company_code, t.account_number 
 12 --HashAggregate 
        Salida: t1.ssc_code, t1.company_code, t1.account_number, t1.user_id 
        Grupo por clave: t1.ssc_code, t1.company_code, t1.account_number, t1.user_id 
 13 --Escaneo de nodo de datos en rt_act_mca_dc_user_privilege_dtl_f "_REMOTE_TABLE_QUERY_" 
        Salida: t1.ssc_code, t1.company_code, t1.account_number, t1.user_id 
        Nodo/s: todos los nodos de datos
        Consulta remota: SELECCIONE ssc_code, company_code, account_number, user_id SOLO DESDE fin_drt_act.rt_act_mca_dc_user_privilege_dtl_f t1 DONDE flow_type::text = 'EC_GL'::text AND chek_type::text = 'EC_GL_STO'::text AND begin_date <= pg_systimestamp():: marca de tiempo(0) sin zona horaria Y fecha_final >= pg_systimestamp()::marca de tiempo(0) sin zona horaria 
 14 --Salida 
        hash: t1.ssc_code, t1.company_code, t1.account_code, t1.period_id, t1.unique_id 
 15 - -Escaneo de nodo de datos en apd_npd_rmk_to_sto_tmp "_REMOTE_TABLE_QUERY_" 
        Salida: t1.ssc_code, t1.company_code, t1.account_code, t1.period_id, t1.unique_id 
        Nodo/s: todos los nodos de 
        datos Consulta remota: SELECT ssc_code, company_code, account_code, period_id, Unique_id FROM SÓLO fin_drt_act.apd_npd_rmk_to_sto_tmp t1 DONDE verdadero 

                         Información del nodo de datos (identificada por la identificación del plan)                           
----------------------------------- -------------------------------------------------- ---------- 
  1 --Fusionar en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t 
        (tiempo real=806911.616..806911.617 filas=17948 bucles=1) 
        (Buffers: hit compartido=6) 
        (CPU: ex c/r= 116340958, ex fila=17948, ex cyc=2088087526316, inc cyc=2097953048602) 
  2 --Bucle anidado (3,4) 
        (tiempo real=561.052..3795.279 filas=17948 bucles=1) (tiempo de proyección=23.340) 
        (CPU : ex c/r=7752, ex fila=17949, ex cyc=139143070, inc cyc=9865522286) 
  3 --Resultado 
        (tiempo real=0.001..0.003 filas=1 bucles=1) (tiempo de proyección=0.001) 
        (CPU : ex c/r=4680, ex fila=1, ex cyc=4680, inc cyc=4680) 
  4 --Hash Anti Join (5, 6) 
        (tiempo real=561.044..3741.930 filas=17948 bucles=1) ( tiempo de proyección=7.143) 
        (Buffers: hit compartido=6) 
        (CPU: ex c/r=9584, ex fila=17955, ex cyc=172088156, inc cyc=9726374536) 
  5 --Escaneo de nodo de datos en rt_act_apd_npd_rmk_sto_his_dtl_f "_REMOTE_TABLE_QUERY_" 
        ( tiempo real=176.472..3291.507 filas=17948 bucles=1) 
        (Buffers: 0) 
        (CPU: ex c/r=476658, ex fila=17948, ex cyc=8555072428, inc cyc=8555072428) 
  6 --Hash 
        (real tiempo=384.317..384.317 filas=7 bucles=1) 
        (Buffers: hit compartido=6) 
        (CPU: ex c/r=10954, ex fila=7, ex cyc=76680, inc cyc=999213952) 
  7 --Hash Unión derecha (8, 14) 
        (tiempo real=384.028..384.287 filas=7 bucles=1) (tiempo de filtro=0.043 tiempo de proyección=0.000) 
        (Búfers: visitas compartidas=6) 
        (CPU: ex c/r=4613, ex fila=205, ex cyc=945852, inc cyc=999137272)  
  8 --Subconsulta Scan en t2
        (tiempo real=6.751..6.915 filas=198 bucles=1) (tiempo de filtrado=0.018)
        (CPU: ex c/r=682, ex fila=198, ex cyc=135038, inc cyc=17975308) 9 
  --WindowAgg 
        (tiempo real=6.741..6.862 filas=198 bucles=1) (tiempo de proyección=0.016) 
        (Buffers: hit compartido=6) 
        (CPU: ex c/r=1848, ex fila=198, ex cyc=366028, inc cyc=17840270) 10 
 --Ordenar 
        (tiempo real=6.716..6.730 filas=198 bucles= 1) 
        (Búfers: hit compartido=6) 
        (CPU: ex c/r=14173, ex fila=198, ex cyc=2806302, inc cyc=17474242) 11 
 --Escaneo de subconsulta en t 
        (tiempo real=5.524..5.650 filas=198 bucles=1) (tiempo de proyección=0.067) 
        (CPU: ex c/r=1406, ex fila=198, ex cyc=278492, inc cyc=14667940) 
 12 --HashAggregate 
        (tiempo real=5.490..5.535 filas=198 bucles=1) (tiempo de proyección=0.003) 
        (Buffers: 0) 
        (CPU: ex c/r=2111, ex fila=198, ex cyc=418106, inc cyc=14389448) 
 13 --Escaneo de nodo de datos activado rt_act_mca_dc_user_privilege_dtl_f "_REMOTE_TABLE_QUERY_" 
        (tiempo real=2.249..5.378 filas=198 bucles=1) 
        (Búfers: 0) 
        (CPU: ex c/r=70562, ex fila=198, ex cyc=13971342, inc cyc=13971342) 
 14 --Hash 
        (tiempo real=377.009..377.009 filas=7 bucles=1) 
        (Buffers: 0) 
        (CPU: ex c/r=8018, ex fila=7, ex cyc=56128, inc cyc=980216112) 
 15 - -Escaneo de nodo de datos en apd_npd_rmk_to_sto_tmp "_REMOTE_TABLE_QUERY_" 
        (tiempo real=128.393..376.991 filas=7 bucles=1) 
        (Buffers: 0) 
        (CPU: ex c/r=140022854, ex fila=7, ex cyc=980159984, inc cyc=980159984) 

                 ====== Resumen de consulta =====                   
--------------------------------- ---------------------------- 
Tiempo de sondeo de consulta remota: 169.602 ms, tiempo de deserialización: 7.760 ms 
Tiempo de sondeo de consulta remota: 4.858 ms, deserialización tiempo: 0,006 ms 
Tiempo de sondeo de consulta remota: 319,716 ms, tiempo de deserialización: 0,000 ms Tiempo de puesta en cola: 0,034 ms Tiempo de 
inicio del 
ejecutor del coordinador: 0,551 ms Tiempo de 
ejecución del ejecutor del coordinador: 806912,768 ms Tiempo de 
finalización del ejecutor del coordinador: 17,822 ms Tiempo de ejecución del analizador: 
0,000 ms Tiempo de ejecución 
del planificador : 4,840 ms 
ID de consulta: 83598068858005619 
ID de SQL único: 4289851310 
Tiempo de ejecución total: 806936,261 ms

Cuando se utiliza en los negocios, la declaración MERGE INTO se utilizará para implementar funciones similares a UPSERT . En este escenario, los datos en la parte USING de la declaración MERGE INTO son una cláusula VALUES. La forma en que está escrita la parte USING puede hacer que la ejecución de la declaración MERGE INTO no se impulse hacia abajo .
En la declaración SQL de este artículo, se puede ver que la razón para no presionar hacia abajo es la tabla dual y la tabla no se usa en la cláusula VALUES, por lo que la declaración SQL de la cláusula USING se reescribe para que todo el SQL La declaración se puede empujar hacia abajo.
Reescribe la declaración

fusionarse en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f T usando 
(SELECT 'Y' del_flag) S en ( 
T.PERIOD_ID = 202308 Y NO EXISTE 
(SELECCIONE 1 DE FIN_DRT_ACT.RT_ACT_APD_NPD_RMK_TO_STO_V S WHERE T.UNIQUE_ID = S.UNIQUE_ID AND T.PERIOD_ID = S.PERIOD_ID) ) 
CUANDO COINCIDE ENTONCES ACTUALIZAR SET T.del_flag=S.del_flag

Plan de ejecución detallado de declaración reescrita

identificación | operación | Filas electrónicas | E-distinto | Memoria electrónica | Ancho electrónico | Costos electrónicos 
----+------------------------------------------ -------------------------------------------------- -----------+--------+------------+------- ---+---------+--------- 
  1 | -> Adaptador de fila | 1 | | | 572 | 2838,74 
  2 | -> Transmisión de vectores (tipo: GATHER) | 1 | | | 572 | 2838,74 
  3 | -> Fusión de vectores en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t | 17592 | | 48 MB | 572 | 2834,97 
  4 | -> Vector Hash Anti unión (5, 9) | 17592 | | 16 MB | 572 | 2834,97 
  5 | -> Bucle de nido vectorial (6,8) | 17852 | 686 | 1 MB | 532 | 1873.40 
  6 | -> Adaptador vectorial | 26 | | 1 MB | 0 | 0,01     
  7 | -> Resultado | 26 | | 1 MB | 0 | 0,01     
  8 | -> Escaneo CStore en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t | 17852 | | 1 MB | 500 | 1866.51 
  9 | -> Transmisión vectorial (tipo: TRANSMISIÓN) | 6838 | 52 | 2 MB | 594 | 947,28   
 10 | -> Unión derecha de hash vectorial (11, 20) | 263 | | 16 MB | 594 | 706.57   
 11 | -> Transmisión vectorial (tipo: TRANSMISIÓN) | 6162 | 47 | 2 MB | 30 | 674,47   
 12 | -> Exploración de subconsultas vectoriales en t2 | 237 | | 1 MB | 30 | 631.14   
 13 | -> Vector VentanaAgg | 237 | | 16 MB | 18 | 631.03    
 14 | -> Ordenar vectores | 237 | | 16 MB | 18 | 630.56  
 15 | -> Transmisión de vectores (tipo: REDISTRIBUIR) | 234 | | 2 MB | 18 | 629,85  
 16 | -> Exploración de subconsultas vectoriales en t | 234 | | 1 MB | 18 | 629,51   
 17 | -> Agregado de hash sónico vectorial | 234 | | 16 MB | 28 | 629,42   
 18 | -> Transmisión de vectores (tipo: REDISTRIBUIR) | 236 | | 2 MB | 28 | 629,24   
 19 | -> Escaneo CStore en fin_drt_act.rt_act_mca_dc_user_privilege_dtl_f t1 | 236 | | 1 MB | 28 | 628,94   
 20 | -> Iterador de partición vectorial | 260 | 30 | 1 MB | 2112 | 30.03    
 21 | -> Escaneo de CStore particionado en fin_drt_act.apd_npd_rmk_to_sto_tmp t1 | 260 | | 1 MB | 2112 | 30.03    

                                                                                                                            Información de predicado (identificada por identificación del plan)                                                                                                                              
----------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --- 
  4 --Vector Hash Anti Unión (5, 9) 
        Hash Cond: (((t.unique_id)::text = ((t1.period_id)::text || (t1.unique_id)::text)) AND (t.period_id = (t1.period_id)::numeric)) 
  8 --CStore Escaneo en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t 
        Filtro: (t.period_id = 202308::numeric) 
        Filtro de predicado pushdown: (t.period_id = 202308:: numérico) 
 10 --Vector Hash Unión derecha (11, 20) 
        Hash Cond: ((t2.ssc_code)::text = (t1.ssc_code)::text) 
        Filtro de unión: (((t1.company_code)::text = (CASO CUANDO ((t2.company_code)::text = 'ALL'::text) ENTONCES t1.company_code ELSE t2.company_code END)::text) AND ((t1.account_code)::text = (CASE CUANDO (( t2.account_number)::text = 'ALL'::text) ENTONCES t1.account_code ELSE t2.account_number END)::text)) 
 12 --Escaneo de subconsultas vectoriales en 
        el filtro t2: (t2.rownumber = 1) 
 17 -- Vector Sonic Hash Aggregate 
        Skew Agg optimizado por estadística
 19 --CStore Scan en fin_drt_act.rt_act_mca_dc_user_privilege_dtl_f t1 
        Filtro: (((t1.flow_type)::text = 'EC_GL'::text) AND ((t1.chek_type)::text = 'EC_GL_STO'::text) AND ( t1.begin_date <= (pg_systimestamp())::timestamp(0) sin zona horaria) AND (t1.end_date >= (pg_systimestamp())::timestamp(0) sin zona horaria)) Filtro de predicado pushdown: (( 
        ( t1.flow_type)::text = 'EC_GL'::text) AND ((t1.chek_type)::text = 'EC_GL_STO'::text) AND (t1.begin_date <= (pg_systimestamp())::timestamp(0 ) sin zona horaria) AND (t1.end_date >= (pg_systimestamp())::timestamp(0) sin zona horaria)) 
 20 --Iteraciones del iterador de partición vectorial 
        : 120 
 21 --Escaneo de CStore particionado en fin_drt_act.apd_npd_rmk_to_sto_tmp t1 
        Particiones seleccionadas por Static Prune: 1..120 

                                                                                                                                                                                                                                                                                                                                                                                                  Información de la lista de objetivos (identificada por la identificación del plan)                                                                                                                                                                                                                                                                                                                                                                                                   
---------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------- 
  2 --Vector Streaming (tipo: GATHER) 
        Nodo/s: Todos los nodos de datos 
  4 --Anti unión de hash vectorial (5, 9)
        Salida: ('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.exception_type, t.exception_type_name, 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 --Vector Nest Loop (6,8) 
        Salida: ('Y'::texto), 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.exception_type, t.exception_type_name, 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 --Salida del adaptador vectorial 
        : 'Y'::text 
  7 --Salida 
        del resultado: 'Y' ::text 
  8 --CStore Escaneo en fin_drt_act.rt_act_apd_npd_rmk_sto_his_dtl_f t 
        Salida: 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.exception_type, t.exception_type_name, 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 
        Clave de distribución: t.seq_id 
  9 --Vector Streaming (tipo: BROADCAST) 
        Salida: t1.ctid, t1.tableoid, t1.period_id, t1.unique_id, t2.ssc_code, t2.company_code, t2.account_number, t2.level_key, t2.rownumber 
        Generar en: Todos los 
        nodos de datos Nodos consumidores: Todos los nodos de datos 
 10 --Vector Hash Right Join (11, 20)
        Salida: 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 --Vector Streaming (tipo: BROADCAST) 
        Salida: t2 .ssc_code, t2.company_code, t2.account_number, t2.level_key, t2.rownumber 
        Generación en: Todos los nodos de datos Nodos 
        consumidores: Todos los nodos de datos 
 12 --Escaneo de subconsultas vectoriales en t2 
        Salida: t2.ssc_code, t2.company_code, t2.account_number, t2.level_key, t2.rownumber 
 13 --Vector WindowAgg 
        Salida: t.ssc_code, t.company_code, t.account_number, (CASE WHEN (((t.company_code)::text = 'ALL'::text) AND (( t.account_number)::text = 'ALL'::text)) ENTONCES 0 CUANDO (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = ' TODOS'::texto)) ENTONCES 1 MÁS 2 FINAL), denso_rank() SOBRE (PARTICIÓN POR t.ssc_code ORDENAR POR (CASO CUANDO (((t.company_code)::texto = 'TODOS'::texto) Y (( t.account_number)::text = 'ALL'::text)) ENTONCES 0 CUANDO (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = ' TODOS'::texto)) ENTONCES 1 MÁS 2 FINAL) USANDO = NULLS ÚLTIMO) 
 14 --Salida de clasificación vectorial 
        : t.ssc_code, (CASE WHEN (((t.company_code)::text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) ENTONCES 0 CUANDO (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number):: text = 'ALL'::text)) ENTONCES 1 ELSE 2 END), t.company_code, t.account_number 
        Clave de clasificación: t.ssc_code, (CASE WHEN (((t.company_code)::text = 'ALL':: texto) Y ((t.account_number)::text = 'ALL'::text)) ENTONCES 0 CUANDO (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number) ::text = 'ALL'::text)) ENTONCES 1 ELSE 2 END) 
 15 --Vector Streaming(tipo: REDISTRIBUTE) 
        Salida: t.ssc_code, (CASE WHEN (((t.company_code)::text = 'ALL '::text) AND ((t.account_number)::text = 'ALL'::text)) ENTONCES 0 CUANDO (((t.company_code)::text <> 'ALL'::text) AND ((t .account_number)::text = 'ALL'::text)) ENTONCES 1 ELSE 2 END), t.company_code, t.account_number 
        Clave de distribución: t.ssc_code 
        Generación en: Todos los nodos de datos 
        Nodos consumidores: Todos los nodos de datos 
 16 --Subconsulta vectorial Escanear en t 
        Salida: t.ssc_code, CASE WHEN (((t.company_code)::text = 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) THEN 0 CUANDO (((t.company_code)::text <> 'ALL'::text) AND ((t.account_number)::text = 'ALL'::text)) ENTONCES 1 ELSE 2 END, t.company_code, t .account_number 
 17 --Salida agregada de Vector Sonic Hash 
        : t1.ssc_code, t1.company_code, t1.account_number, t1.user_id 
        Grupo por clave: t1.ssc_code, t1.company_code, t1.account_number, t1.user_id 
 18 --Vector Streaming (tipo: REDISTRIBUTE) 
        Salida: t1.ssc_code, t1.company_code, t1.account_number, t1.user_id
        Clave de distribución: t1.account_number  
        Generación en: Todos los nodos de datos
        Nodos consumidores: todos los nodos de datos 
 19 --CStore Escaneo en fin_drt_act.rt_act_mca_dc_user_privilege_dtl_f t1 
        Salida: t1.ssc_code, t1.company_code, t1.account_number, t1.user_id 
        Clave de distribución: t1.id 
 20 --Iterador de partición vectorial 
        Salida: t1.ctid, t1.tableoid, t1.ssc_code, t1.company_code, t1.account_code, t1.period_id, t1.unique_id 
 21 --Escaneo de CStore particionado en fin_drt_act.apd_npd_rmk_to_sto_tmp t1 
        Salida: t1.ctid, t1.tableoid, t1.ssc_code, t1.company_code, t1.account_code, t1.period_id, t1.unique_id 
        Clave de distribución: t1.row_number 

  ====== Resumen de consulta =====    
------------ ------------------- 
Memoria disponible del sistema: 2097152 KB 
Memoria máxima de consulta: 2097152 KB 
Memoria estimada de consulta: 131072 KB Tiempo 
de ejecución del analizador: 0,102 ms 
Tiempo de ejecución del planificador: 4,602 ms 
ID de SQL único: 1168204269

Se puede ver que la declaración SQL se puede presionar hacia abajo y, después de la verificación comercial, el tiempo de ejecución de la declaración se reduce a aproximadamente 10 segundos.

Haga clic para seguir y conocer las nuevas tecnologías de Huawei Cloud lo antes posible ~

 

El autor del marco de código abierto NanUI pasó a vender acero y el proyecto fue suspendido. La primera lista gratuita en la App Store de Apple es el software pornográfico TypeScript. Acaba de hacerse popular, ¿por qué los grandes empiezan a abandonarlo? Lista de octubre de TIOBE: Java tiene la mayor caída, C# se acerca Java Rust 1.73.0 lanzado Un hombre fue alentado por su novia AI a asesinar a la Reina de Inglaterra y fue sentenciado a nueve años de prisión Qt 6.6 publicado oficialmente Reuters: RISC-V La tecnología se convierte en la clave de la guerra tecnológica entre China y Estados Unidos. Nuevo campo de batalla RISC-V: no controlado por ninguna empresa o país, Lenovo planea lanzar una PC con Android.
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10115820
Recomendado
Clasificación