MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 29/07/09, 22:01:22
Rodolfo SAP Rodolfo SAP is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 89
Lightbulb Ayuda con Performance y manejo de memoria

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


Código Subrutinas en un Z Include





Archivos Adjuntos
Tipo de Archivo: zip Dump.zip (526 Bytes, 9 visitas)
Responder Con Cita
  #2  
Viejo 30/07/09, 07:56:05
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Esta pregunta es muy compleja y se necesitaria ver bien el codigo y mucho tiempo de analisis yo te digo lo que pienso desde mi desconocimiento d ela naturaleza del proceso que ejecutais

La primera optimizacion siempre debe ser reducir el flujo de datos de los select,
por ejemplo :

no hagas SELECT * si no necesitas todos los campos
acceder siempre a las tablas por campos claves y si no es posible plantear la posibilidad de crear un indice
intentar acotar al maximo para no traer lineas que no vamos a necesitar o que posteriormente vamos a rechazar

Teniendo en cuenta todo esto si el proceso es tan masivo deberia ejecutarse en fondo con lo que te evitarias los problemas de time out y podrias tener mas controlado el tema de quedarte sin memoria (existe un parametro que es la memoria asignada a los procesos en fondo podrias consultar con el BASIS si ese parametro se podria aumentar o incluso si hay la posibilidad de aumentarlo solo para un proceso especifico)

Un proceso ejecutado en fondo la unica limitacion que tiene es que no va a permitir al usuario interactuar con el por lo que si ese es tu caso deberias hacerlo asi y dejar que trabaje la maquina sin tener que hacer grandes modificaciones en el programa

Ya te digo que esto es una aproximacion, seguro que mas gente puede aportar otros puntos de vista
Responder Con Cita
  #3  
Viejo 19/08/09, 20:28:39
spider_galu spider_galu is offline
Junior Member
 
Fecha de Ingreso: ago 2009
Mensajes: 5
Estoy de acuerdo en lo del select, debes de optimizar solo los campos que vas a utilizar, colocarlos en el orden en el que estan en la tablas y accesar por los campos llaves, una vez que otienes los datos siempre es bueno verificar si la tabla trajo datos para proseguir ejecutando el programa.

Cuando se utiliza un read table es necesario ordenar la tabla por los campos con los campos vas accesar, además podrias agregarle la sentencia binary search para que el acceso a la tabla interna se mas rápida y eficaz...

Saludos
Responder Con Cita
  #4  
Viejo 27/01/10, 17:49:10
Rodolfo SAP Rodolfo SAP is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 89
Thumbs up Solución

La vdd este tema me ha dado mucha lata pero despues de mucho tiempo consegui una solución para estos temas lo cual aconsejo buscar un buen manualito de performance como por ejemplo....

Hacer uso de Field-symbols y estructutas.

Example.

TYPES: BEGIN OF ty_data,
value TYPE string,
END OF ty_data.



DATA: t_data TYPE STANDARD TABLE OF ty_data.

FIELD-SYMBOLS: <fs_data> LIKE LINE OF t_data.

y usar LOOP AT t_data ASSIGNING <fs_data>.
ENDLOOP.


o por ejemplo


usar la instruccion BINARY SEARCH y un SORT antes en la tabla y ocupando la structura.

SORT t_data BY k ASCENDING.
READ TABLE t_data INTO wa_data WITH KEY K = 'X' BINARY SEARCH.


o por ejemplo

Uso de índices para

COrrecto
DELETE t_dataFROM 450 TO 550. es preferible a:

Incorrecto
DO 101 TIMES.
DELETE t_data INDEX 450.
ENDDO.

O utlizar las herramientas que ya SAP nos proporciona por ejemplo o hasta funciones de mucha utilidad siempre hay algo que nos ayudara.

COLLECT
REPLACE
GET
FIND

El USO DE INDICES O VISTAS TAMBE¡IEN ES RECOMENDABLE.

etc etc




Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 11:59:28.


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