Rodolfo SAP
29/07/09, 22:01:22
Compañeros Abap.
Tengo el siguiente problema, existe un programa estandar que esta generando un dump por falta de recursos (anexo dump) ok entonces lo que se esta pensando es mejorar el performance de las subrutinas de proceso para este programa, estas subrutinas estan en un include Z.
En algunas subrutinas tengo varios select que son a tablas muy muy pesadas ejemplo hrp1001 aprox 400,000 , ZHR_KARDEX_BW aprox 8,000,000 de registros y esta llama a subrutinas lo hace por una iteración GET a una base de datos logica.
Solución.
Mi idea es realizar una extracción global de las tablas y posteriormente realizar puros READ TABLE en las subrutinas, como no puedo modificar el programa Main Estandar no puedo meter alguna subrutina inicial antes del GET object para hacer la extracción global, entonces pienso que se podria crear un programita Z que me deje en memoria las extracciones de datos y posteriormente en las subrutinas hacer el import de esa extraccion para realizar los READ TABLE pero no se como hacer esto no conozco muy bien las funciones EXPORT MEMORY e IMPORT MEMORY y tampoco se si esto se pueda hacer o sea logico factible y pues que sea una buena opcion y si de verdad me puede ayudar a lograr la disminución de tiempo en las subrutinas.
Código programa Main Estandar
GET objec.
PERFORM HR_CUALIF.
PERFORM HR_GET_KAR.
PERFORM HR_CAT_FUN.
Código Subrutinas en un Z Include
form hr_cualif using p_in
changing p_parm like /ehr/s71_user_exit_parm
p_out.
types: begin of hr_profileqk,
class_id type hrpe_profq-class_id, " Grupo
class_text type hrpe_profq-class_text, " Textp grupo
tbjid type hrpe_profq-tbjid, " Caulificación
ttext type hrpe_profq-ttext, " Texto cualificación
profc_text type hrpe_profq-profc_text, " Calificación
profcy type hrpe_profq-profcy, "ID
end of hr_profileqk.
select * from hrp1001 into table gt_escolqk
where otype eq gv_otypeqk and
objid eq so_class-low and
plvar eq p_parm-plvar and
begda le sy-datum and
endda ge sy-datum and
subty eq gv_subty.
if sy-subrc eq 0.
loop at gt_escolqk into gs_escolqk.
so_class-sign = 'I'.
so_class-option = 'EQ'.
so_class-low = gs_escolqk-sobid.
append so_class.
endloop.
endif.
form HR_GET_KAR using p_in
changing p_parm like /ehr/s71_user_exit_parm
p_out.
**INI_INS_ADU030609---------------------------------------
data: ls_zhr_kardex_bw like line of itab_zhr_kardex_bw.
**END_INS_ADU030609---------------------------------------
select pernr fejecucion total from ZHR_KARDEX_BW
into table itab_ZHR_KARDEX_BW
where pernr = p_in.
form HR_CAT_FUN using p_in
changing p_parm like /ehr/s71_user_exit_parm
p_out.
select single hilfm from hrp1010
into hilfm
where plvar = '01' and
otype = 'C' and
objid = p_in and
subty = subty and
begda < sy-datum and
endda > sy-datum.
if sy-subrc = 0.
select single sutxt from t777u
into sutxt
where langu = 'S' and
infty = '1010' and
subty = subty.
select single htext from t777w
into htext
where langu = 'S' and
subty = subty and
hilfm = hilfm.
concatenate subty sutxt '/' hilfm htext into p_out separated by space.
exit.
endif.
Tengo el siguiente problema, existe un programa estandar que esta generando un dump por falta de recursos (anexo dump) ok entonces lo que se esta pensando es mejorar el performance de las subrutinas de proceso para este programa, estas subrutinas estan en un include Z.
En algunas subrutinas tengo varios select que son a tablas muy muy pesadas ejemplo hrp1001 aprox 400,000 , ZHR_KARDEX_BW aprox 8,000,000 de registros y esta llama a subrutinas lo hace por una iteración GET a una base de datos logica.
Solución.
Mi idea es realizar una extracción global de las tablas y posteriormente realizar puros READ TABLE en las subrutinas, como no puedo modificar el programa Main Estandar no puedo meter alguna subrutina inicial antes del GET object para hacer la extracción global, entonces pienso que se podria crear un programita Z que me deje en memoria las extracciones de datos y posteriormente en las subrutinas hacer el import de esa extraccion para realizar los READ TABLE pero no se como hacer esto no conozco muy bien las funciones EXPORT MEMORY e IMPORT MEMORY y tampoco se si esto se pueda hacer o sea logico factible y pues que sea una buena opcion y si de verdad me puede ayudar a lograr la disminución de tiempo en las subrutinas.
Código programa Main Estandar
GET objec.
PERFORM HR_CUALIF.
PERFORM HR_GET_KAR.
PERFORM HR_CAT_FUN.
Código Subrutinas en un Z Include
form hr_cualif using p_in
changing p_parm like /ehr/s71_user_exit_parm
p_out.
types: begin of hr_profileqk,
class_id type hrpe_profq-class_id, " Grupo
class_text type hrpe_profq-class_text, " Textp grupo
tbjid type hrpe_profq-tbjid, " Caulificación
ttext type hrpe_profq-ttext, " Texto cualificación
profc_text type hrpe_profq-profc_text, " Calificación
profcy type hrpe_profq-profcy, "ID
end of hr_profileqk.
select * from hrp1001 into table gt_escolqk
where otype eq gv_otypeqk and
objid eq so_class-low and
plvar eq p_parm-plvar and
begda le sy-datum and
endda ge sy-datum and
subty eq gv_subty.
if sy-subrc eq 0.
loop at gt_escolqk into gs_escolqk.
so_class-sign = 'I'.
so_class-option = 'EQ'.
so_class-low = gs_escolqk-sobid.
append so_class.
endloop.
endif.
form HR_GET_KAR using p_in
changing p_parm like /ehr/s71_user_exit_parm
p_out.
**INI_INS_ADU030609---------------------------------------
data: ls_zhr_kardex_bw like line of itab_zhr_kardex_bw.
**END_INS_ADU030609---------------------------------------
select pernr fejecucion total from ZHR_KARDEX_BW
into table itab_ZHR_KARDEX_BW
where pernr = p_in.
form HR_CAT_FUN using p_in
changing p_parm like /ehr/s71_user_exit_parm
p_out.
select single hilfm from hrp1010
into hilfm
where plvar = '01' and
otype = 'C' and
objid = p_in and
subty = subty and
begda < sy-datum and
endda > sy-datum.
if sy-subrc = 0.
select single sutxt from t777u
into sutxt
where langu = 'S' and
infty = '1010' and
subty = subty.
select single htext from t777w
into htext
where langu = 'S' and
subty = subty and
hilfm = hilfm.
concatenate subty sutxt '/' hilfm htext into p_out separated by space.
exit.
endif.