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 15/01/10, 18:31:24
kreuzigen kreuzigen is offline
Member
 
Fecha de Ingreso: feb 2009
Mensajes: 53
Que que paso?

Es muy sencillo, tienes anidados 5 selects!!!!!!!

Es el programa mas ineficiente que he visto; debes contactar al autor de este programa para pedirle que optimize este código.

La lógica puede ser correcta, sin embargo esta consumiendo al maximo los recursos del servidor.
Responder Con Cita
  #2  
Viejo 15/01/10, 21:49:23
braschilester
 
Mensajes: n/a
Wink Amigo Gracias - Select

Amigo eso quier decir qur al tener una cadena de SELECT

Utiliza mucho recurso en el servidor.-

CUAL PUEDE SER LA SOLUCION SEGUN TU ???

YO TENGO Q REALIZA EL CAMBIO EL AUTOR NO ESTA MAS.
Responder Con Cita
  #3  
Viejo 18/01/10, 07:13:06
VLozano VLozano is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 124
Lo primero y más importante, mantener la calma.

Primero la parrafada tocapelotas, y en el mensaje siguiente un poco de ayuda.

Cuando consigas eso, si el problema persiste y tienes que preguntar en un foro, intenta poner un asunto al hilo que sea relevante. "Ayuda", "No funciona" y cosas así no sirven de nada. O sí, para que la gente NO entre a leer el mensaje y te deje tirado.

Por ejemplo, este hilo podría "asuntarse": Error de ejecución por Time-out
Entonces, los que crean que pueden echarte un cable, entrarán a leer el hilo, y los que se crean incapaces de hacerlo, y no quieran entrar a aprender nada, podrán ignorar el mensaje y ahorrar tiempo y ancho de banda.

Cuando tengas solventado lo del asunto, empieza con el cuerpo del mensaje. Cosas que ayudan:

1- los mensajes de texto del DUMP ponlos en una cita (tag [ QUOTE]), así distinguiremos el problema del mensaje de error
2- el código en un bloque de código (tag [ CODE]), así distinguiremos el problema del mensaje del código (excepto como en este caso, cuando el código forme parte del mensaje de error)

Y a continuación, la respuesta.
__________________
"Porque algunos sabemos que somos parte del problema"
Responder Con Cita
  #4  
Viejo 18/01/10, 07:29:34
VLozano VLozano is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 124
Y ahora un poco de ayuda específica (el mensaje anterior también es de utilidad, pero más generalizada).

El problema que tienes es que tu programa ("tu" porque ahora está bajo tu responsabilidad) accede a un montón de datos de la forma menos optimizada posible. Y si ha funcionado hasta ahora probablemente ha sido por casualidad.

Opciones:

1- verifica todas las tablas LF* (¿datos de clientes?), busca sus campos comunes (LIFNR probablemente para todas, y luego algunas más específicas) y monta una JOIN (IMPORTANTE: asegúrate de utilizar los índices, o podrías llegar a empeorar el problema)

2- crea secuencas de SQL llamándolas para rellenar tablas internas (INTO TABLE) y encadenadas con sentencias FOR ALL ENTRIES IN (IMPORTANTE: si vas a usar el FAEI, asegúrate antes de que la tabla interna de referencia tiene datos, o bajarás la tabla entera empeorando el problema)

Yo en este caso optaría por la opción 1, pero tomaría esa decisión en base a los datos que contienen MIS tablas LF*.
__________________
"Porque algunos sabemos que somos parte del problema"
Responder Con Cita
  #5  
Viejo 18/01/10, 07:30:05
VLozano VLozano is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 124
Cómo construir la JOIN:
- haz una lista de las SQL en un papel
- para cada SQL, anota los campos del WHERE
- subraya para cada campo WHERE aquellos que apuntan a una SQL anterior
- construye la nueva SQL con tantas JOIN como hagan falta
- Nota: las tablas realmente pequeñas (como la T024E, en MI caso) no las metas en la JOIN, esa lectura no afecta realmente al rendimiento, aunque no sea código optimizado.

Ejemplo: Tu programa (el feo) sería algo así:
__________________
"Porque algunos sabemos que somos parte del problema"
Responder Con Cita
  #6  
Viejo 18/01/10, 07:35:19
VLozano VLozano is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 124
Cómo usar el FOR ALL ENTRIES IN:
En caso de tener muchos datos, y no tener claras las relaciones entre las tablas (pojemplo, campo1 y campo2 no son claves en las otras tablas), el FOR ALL ENTRIES IN es una buena opción.

IMPORTANTE: antes de cada SQL hay que verificar que la anterior ha devuelto datos. Si usas un FAEI con una tabla vacía, el sistema te devolverá LA TABLA ENTERA, independientemente de lo que haya en el WHERE (en serio, de verdad, aunque no te lo puedas creer).

Para el mismo ejemplo anterior, el código FAEI sería:
__________________
"Porque algunos sabemos que somos parte del problema"
Responder Con Cita
  #7  
Viejo 18/01/10, 07:41:25
VLozano VLozano is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 124
Cosas a tener en cuenta:

1- Evita declaraciones tipo TABLES. No representan realmente una mejora, y hacen que el código siga difícil de "leer" para el que no conoce el programa.
2- Pon siempre una lista de los campos a traer en las SQL, ahorrarás memoria, ancho de banda y algunos motores de BBDD lo agradecerán en sus oraciones nocturnas
3- No uses declaraciones de tabla usando el OCCURS o el WITH HEADER LINE, hacen los programas más difíciles de seguir

Esos tres consejos van en contra de la vagancia al teclado, pero un verdadero vago (como yo) los sigue, porque sabe que a la larga te ahorran trabajo.

Cómo:
1- Declara variables t_nombretabla TYPE TABLE OF tabla
2- Usa el "CORRESPONDING" en las sentencias INTO si declaras como en 1, o define las tablas/líneas con un BEGIN o un TYPES
3- Declara dos variables: una t_xx TYPE TABLE OF xx y una w_xx TYPE xx. Los READ, LOOP y demás hazlos INTO w_xx, y siempre sabrás si estás tratando con la tabla (t_xx) o la línea (w_xx)

Son tonteridas de vejete, pero ayudan un montón al que viene detrás.

Suerte.
__________________
"Porque algunos sabemos que somos parte del problema"
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 03:28:01.


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