Eficiencia en ABAP
| Eficiencia en ABAP |
|
|
|
| Documentación - Manuales breves | ||||||
| Jueves, 30 de Junio de 2005 16:36 | ||||||
1.2 Recomendaciones Generales1.2.1 Consideraciones SAP- ABAP
1.2.2 Normas generales para programación SQLBasándonos en la arquitectura de los sistemas R/3, existen unas normas básicas y fundamentales que es necesario aplicar en programación ABAP para que los accesos a las BD sean eficientes. Son los siguientes:
1.3 Recomendaciones Tips & Tricks por SAPEstas recomendaciones incluyen ejemplos reales, cuyo tiempo de respuesta puede ser medido que pretenden ilustrar los aspectos comentados en el punto anterior. Estas recomendaciones están localizables en el sistema mediante: Herramientas Workbench ABAP Test Análisis Tmpo. Ejecución Tips & Tricks Se pretende indicar que existen herramientas en el sistema que nos pueden ayudar en momentos de duda a elegir un algoritmo o conjunto de instrucciones más adecuado que otro. Se extrae una muestra a modo de ejemplo pero la lectura que debe realizarse de este apartado es que esta información debe ser consultada de forma online en caso de dudas o búsqueda de sugerencias en el momento de realizar la programación. 1.3.1 Instrucciones sobre la interfaz SAP-SQL
WHERE fecha >= ‘19990212’ es mejor que WHERE NOT FECHA <= ‘19990212’
SELECT * FROM DD01V WHERE DOMNAME LIKE 'CHAR%' AND DDLANGUAGE = SY-LANGU. ENDSELECT. es preferible a : SELECT * FROM DD01L WHERE DOMNAME LIKE 'CHAR%' AND AS4LOCAL = 'A'. SELECT SINGLE * FROM DD01T WHERE DOMNAME = DD01L-DOMNAME AND AS4LOCAL = 'A' AND AS4VERS = DD01L-AS4VERS AND DDLANGUAGE = SY-LANGU.
INSERT CUSTOMERS FROM TABLE itab. es preferible a : LOOP AT TAB. INSERT INTO CUSTOMERS VALUES TAB. ENDLOOP. Utilizar actualizaciones de columna en vez de modificaciones de fila UPDATE SFLIGHT SET SEATSOCC = SEATSOCC - 1. es preferible a: SELECT * FROM SFLIGHT. SFLIGH T-SEATSOCC = SFLIGHT-SEACSOCC -1. UPDATE SFLIGHT. ENDSELECT.
1.3.2 Tratamiento de cadenas de caracteres
1.3.3 Tratamiento de tablas internas
READ TABLE TAB WITH KEY K = 'X' BINARY SEARCH es preferible a: MOVE SPACE TO TAB. TAB-K = 'X'. READ TABLE TAB BINARY SEARCH.
READ TABLE WITH KEY BINARY SEARCH. es preferible a: READ TABLE WITH KEY.
LOOP AT TAB WHERE K = KVAL. ..... ENDLOOP es preferible a: LOOP AT TAB. CHECK TAB-K = KVAL. ..... ENDLOOP.
REFRESH TAB_DEST. LOOP AT TAB_SRC. APPEND TAB_SRC TO TAB_DEST. ENDLOOP. SORT TAB_DEST BY K es preferible a: REFRESH TAB_DEST. LOOP AT TAB_SRC. READ TABLE TAB_DEST WTTH KEY K= .... INSERT TAB_SRC INTO TAB_DEST INDEX SY-INDEX. ENDLOOP.
REFRESH TAB_DEST. LOOP AT TAB_SRC APPEND TAB_SRC TO TAB_DEST. ENDLOOP SORT TAB_DEST BY K. DELETE ADJACENT DUPLICATES FROM TAB_DEST. es preferible a: REFRESH TAB_DEST. LOOP AT TAB_SRC. READ TABLE TAB_DEST WITH KEY K= TAB_SRC-K. IF SY-SUBRC <> 0 . INSERT TAB_SRC INTO TAB_DEST INDEX SY-INDEX. ENDIF. ENDLOOP.
TAB_DEST[ ] = TAB_SRC[ ] es preferible a : REFRESH TAB_DEST. LOOP AT TAB_SRC INTO TAB_DEST. APPEND TAB_DEST. ENDLOOP.
IF TAB1[ ] = TAB2 [ ] .... ENDIF. Es preferible a realizar una barrido secuencial de una tabla e ir comparando con la entrada equivalente en la otra tabla.
SORT ITAB BY FIELD1 FIELD2. es preferible a: SORT ITAB.
DESCRIBE TABLE ITAB LINES C_LINEAS. es preferible a: LOOP AT ITAB. C_LINEAS = C_LINEAS + 1. ENDLOOP.
Suponiendo: tablas ordenadas, TAB2 contiene sólo entradas que existen en TAB1. I2 = 1. LOOP AT TAB1. LOOP AT TAB2 FROM I2. IF TAB2-K <> TAB1-K. I2 = SY-TABIX. EXIT. ENDIF. " ... ENDLOOP. ENDLOOP. es preferible a : LOOP AT TAB1. LOOP AT TAB2 WHERE K = TAB1-K. ... ENDLOOP. ENDLOOP.
APPEND LINES OF TAB_SRC TO TAB_DEST. es preferible a: LOOP AT TAB_SRC. APPEND TAB_SRC TO TAB_DEST. ENDLOOP.
Uso de índices para DELETE TAB_DEST FROM 450 TO 550. es preferible a: DO 101 TIMES. DELETE TAB_DEST INDEX 450. ENDDO. DELETE TAB_DEST WHERE K = KVAL. Es preferible a: LOOP AT TAB_DEST WHERE K = KVAL DELETE TAB_DEST ENDLOOP 1.3.4 Tratamiento de parámetros en rutinas y field-symbols
FIELD-SYMBOLS: TYPE I. Es preferible a: FIELD-SYMBOLS: . 1.3.5 Manejo de variables y tipos
CONSTANTS: PI TYPE F VALUE '3.1415926535897932'. DATA: FLOAT TYPE F. FLOAT = PI. es preferible a: DATA: FLOAT TYPE F. FLOAT = '3.1415926535897932'.
DATA: P1 TYPE P VALUE '123456789012345', P2 TYPE P VALUE '543210987654321', P1 = P1 + P2. es preferible a: DATA: N1(15) TYPE N VALUE '123456789012345', N2(15) TYPE N VALUE '543210987654321', N1 = N1 + N2.
1.4 Exposición de Sentencias SQL “caras”1.4.1 DefiniciónSe definen de esta manera aquellas sentencias que:
1.4.2 TiposPara todas las BD y para todas las aplicaciones SAP y no-SAP, las sentencias SQL costosas pueden agotar los recursos del sistema operativo y causar graves problemas de rendimiento del sistema entero. Existen, básicamente, dos tipos de sentencias SQL llamadas “caras” teniendo en cuenta el consumo de los recursos del sistema:
Los datos que se necesitan para analizar sentencias SQL son:
1.4.3 DetecciónLos tiempos de espera largos son el resultado del tiempo que emplea la BD en devolver los datos pedidos por R/3 y el que emplea R/3 en devolver la siguiente pantalla al usuario. ¿Cómo detectar las sentencias costosas?
(Ver Anexo 4 “¿De Dónde procede la sentencia SQ?”). 1.4.4 ClasificaciónAnalizando los dos tipos de sentencias a través de SQL Trace (transacción ST05) apreciamos:
Si consultamos el Area SQL compartida (transacción ST04; Menú de análisis detallado; Peticiones SQL) para los dos tipos de sentencias anteriores, encontramos:
1.4.5 Soluciones
Cambiar algún índice existente, en vez de crear uno nuevo. Crear un índice nuevo (analizar antes el histograma de distribución de los datos con la transacción DB05). Quitar un índice (especialmente en versiones 3.x de Oracle con optimizadores en modo normas). O
WHERE es demasiado compleja, re-escribir el código.
¡Sólo los usuarios registrados pueden escribir comentarios!
Powered by !JoomlaComment 3.26
3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."
|




