MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Problema Performance (foro/showthread.php?t=27312)

DavidXD_XD 13/01/09 12:27:50

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 !!!

francesc 13/01/09 12:44:30

Podrías probar a hacer un delete antes del loop.

DavidXD_XD 13/01/09 14:46:13

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 !!!

Turu 13/01/09 14:57:54

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

DavidXD_XD 13/01/09 16:04:00

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


Husos Horarios son GMT. La hora en este momento es 07:09:41.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web