#1
|
||||
|
||||
Problema Performance
Buenos dias gente .... tengo una consulta, esta relacionado a Performance, veran tengo un SELECT en el cual me trae todos los movimientos de la MSEG y la MKPF y la guardo dentro de una tabla interna gt_mseg la cual es de tipo HASHED con llaves en mblnr, mjahr y zeile y despues hago lo siguiente
El problema es que el SELECT me bota aproximadamente como un millon de registros y donde se demora el programa es en el LOOP, el LOOP ya lleva muchas horas y no acaba , xfa necesito sus sugerencias o una mejor forma d q el LOOP avance rapido, un saludo a todos !!!
__________________
David Carballido Córdova |
#2
|
|||
|
|||
Podrías probar a hacer un delete antes del loop.
|
#3
|
||||
|
||||
Listo gente ... gracias por la ayuda, hola francesc gracias a ti tbm por la ayuda ... ya pude resolverlo y en efecto era con un DELETE pero dentro del LOOP, derrepente me ekivoco pero siempre es bueno para poder saber q es errado algunas ideas q tienes, ahi va
Como habia declarado la tabla interna gt_mseg como HASHED no permite modificaciones a nivel de campo y tampoco admite la funcionalidad del sy-tabix al momento del LOOP, si entramos al LOOP con una tabla hashed el sy-tabix no se refresca (lo mire y mire dentro del debugg), entonces no pude borrar el registro simplemente usando DELETE gt_mseg INDEX sy-tabix Para eso simplemente declare una tabla interna normal lt_mseg e hice lo siguiente En esta parte a diferencia de la otra no realizo doble consulta, como la tabla interna es recontra pesada es muy mala idea realizarle un DELETE WHERE ahi realizo doble consulta y lentea el proceso ... un saludo a todos !!!
__________________
David Carballido Córdova |
#4
|
|||
|
|||
Hola,
Lo primero; creo que en tu loop borras el registro al uqe apunta el field-symbol y no sé si eso te puede dar problemas. Segundo te pongo tu codigo modificado, creo que el resultado es el mismo, a ver si te vale: LOOP AT gt_mseg ASSIGNING <gfs_mseg> WHERE bwart IN lr_bwart. IF <gfs_mseg>-matnr = <gfs_mseg>-ummat AND <gfs_mseg>-charg = <gfs_mseg>-umcha AND <gfs_mseg>-werks = <gfs_mseg>-umwrk AND <gfs_mseg>-umlgo IN s_lgort. append <gfs_mseg> to gt_mseg_aux. ENDIF. ENDLOOP. sort gt_mseg_aux by mblnr mjjahr zeile. sort gt_mseg by mblnr mjjahr zeile. LOOP AT gt_mseg_aux into wa_mseg. IF wa_mseg-matnr = wa_mseg-ummat AND wa_mseg-charg = wa_mseg-umcha AND wa_mseg-werks = wa_mseg-umwrk AND wa_mseg-umlgo IN s_lgort. DELETE gt_mseg WHERE mblnr = wa_mseg-mblnr AND mjahr = wa_mseg-mjahr AND zeile = wa_mseg-zeile. ENDIF. ENDLOOP. Espero que te sirva de ayuda y mejore el rendimiento
__________________
Turu |
#5
|
||||
|
||||
Hola turu, esa parte si funcionaba, pero cuando paso a real sacaba mas de 1 millon de registros para procesar y consultar, obligado borre el DELETE WHERE para colocarle el DELETE INDEX sy-tabix, tbm no puse los tiempos, yo deje en JOB ese proceso a las 10pm del dia de ayer y cuando eran las 8am todavia seguia en el LOOP, cancele el JOB y con el cambio q hice se barrio el LOOP en 10 seg
__________________
David Carballido Córdova |
Herramientas | Buscar en Tema |
Desplegado | |
|
|