EL PRIMER PASO EN LA DEFINICION DE UN QUERY ES DEFINIR EL
GRUPO DE USUARIOS: Herramientas / WorkBench ABAP. Utilidades / Query ABAP / Grupos de usuarios. Transaccion: SQ03. El grupo de usuarios sirve para gestionar las autoriaciones de los usuarios !AP. "lick so#re "rear. !olicita un nom#re. "lick so#re el #oton Asignar Usuarios y areas $uncionales. "olocar los nom#res de usuarios %ue integran el grupo. El click a la derecha signi$ica %ue el usuario puede modi$icar el %uery& pueden e'istir usuarios %ue solo lo usan. Para Asignar area $uncional podemos usar una ya de$inida o crearnos una para nosotros. "lick so#re Asignar area $uncional. !eleccionar el area $uncional deseada clickeando la casilla y luego click so#re !alvar. EL SEGUNDO PASO ES CREAR UN AREA FUNCIONAL: Herramientas / WorkBench ABAP. Utilidades / Query ABAP / Area $uncional. Transaccion SQ02. (igitar el nom#re del area $uncional "lick so#re crear. En denominacion colocar un comentario %ue lo descri#a. )arcar so#re calculo de coma $i*a. En ta#la / vista / estructura poner el nom#re de la ta#la. Aceptar. !i se %uiere mas de una ta#la hay %ue usar la opcion union de ta#las. Aparecen a continuacion todos los campos de la ta#la %ue hemos seleccionado. !eleccionar los campos %ue voy a utiliar& esto los agrupara en un grupo $uncional. Ahora vamos a la parte superior del ar#ol donde dice grupo $uncional +de#a*o del nom#re del area $uncional, y hacemos click so#re el icono de la ho*a #lanca +crear, el icono lapi es para modi$icarlo. Aparece una ventana con dos campos& en el primero va un numero correlativo de identi$icacion& en el segundo una descripcion #reve (ar aceptar y al volver hacer click so#re el signo de menos %ue esta al lado del nom#re del campo lo cual lo selecciona. "lick so#re el icono generar. "lick so#re el icono gra#ar. -olver. Asignarlo al grupo de usuarios creado previamente con el #oton Asignar a grupo de usuarios. Hacer click so#re el grupo de usuarios deseados y gra#ar. EL TERCER PASO ES CREAR EL QUERY EN SI MISMO: Herramientas / WorkBench ABAP. Utilidades / Query ABAP / Queries. Transaccion SQ0. Para elegir el grupo de usuarios click en icono "am#iar grupo de usuarios& el icono mas a la i%uierda. (arle un nom#re al %uery. "lick so#re el #oton crear. A continuacion aparece una ventana donde me permite asignarle un area $uncional de las %ue estan asignada al grupo de usuarios seleccionado. En el campo titulo se pone la descripcion del %uery. En el campo lineas no pongas nada. En el campo columnas se pone el ancho de salida en pantalla. "lick so#re el icono imagen siguiente +./,& el de mas a la i%uierda. !eleccionar so#re %ue grupo $uncional se va a #asar este %uery. "lick so#re imagen siguiente +./,. !elecciono los campos %ue vayan a participar en el %uery& ya sean de seleccion o despliegue o consulta. "lick so#re imagen siguiente +./,. Aparece el su#titulo "ampos de seleccion so#re la lista de campos& se usan para los $iltros "lick so#re el #oton lista #asica. Ahora seleccionar los campos %ue se van a desplegar. )arcar separar columnas mediante 0. En el campo linea selecciono si va a ser un reporte linea a linea o multilinea& con 1 en todos van so#re la misma linea o sino numeros correlativos para multilinea. En el campo secuencia el orden de los campos a ser desplegados& cual va primero& cual va despues& si no se le ponen valores a ninguno de estos campos& el campo en cuestion no es desplegado. En el campo clasi$icacion se determina cual de estos campos es clave& cuanto mas #a*o el numero& mas importante el indice& es decir si se pone 1 se ordena por ese campo& el %ue tiene 2 es el siguiente campo %ue se ordena& eso si& dentro de 1. En total& si se trata de un campo %ue contenga valor acumula#le& se puede seleccionar a%uellos %ue son sumariados. El campo recuento acumula la cantidad de registros para ese campo. "lick so#re imagen siguiente +./,. Por de$ecto la ordenacion es ascendente& en el campo dist determino si la ordenacion es descendente. El campo total en esta pantalla permite determinar cual campo de los criterios de ordenacion es el guia de la sumariacion& es decir para cual se van a o#tener su#totales. "lick so#re imagen siguiente +./,. !e determina tipo de #arra de separacion. "lick so#re imagen siguiente +./,. !e puede determinar en esta pantalla colores& anchos de salida& etc. "lick so#re imagen siguiente +./,. A continuacion se determinan titulos y su#tilos so#re el reporte. "lick so#re imagen siguiente +./,. !i se hace click so#re visualiar disposicion +"3456.7, se puede ver el aspecto %ue va teniendo el Query. "on e*ecutar se puede e*ecutar el %uery en cual%uier momento +.8,. (ar salvar. E$iciencia en ABAP 1.1 9#*etivo El o#*etivo %ue se persigue con estas recomendaciones es orientar y concienciar a los desarrolladores de %ue ABAP presenta un con*unto de instrucciones reducido& pero con muchas opciones o posi#ilidades de realiar una misma consulta o instrucci:n. Es evidente %ue las me*oras en unos pocos milisegundos no son importantes aisladamente& pero en muchos casos podremos aplicar estas me*oras en #ucles o rutinas %ue se e*ecuten cientos de veces& lo %ue har; %ue estos milisegundos ahorrados se multipli%uen. Por regla general el rendimiento de los programas ABAP viene determinado en gran parte por la <e$iciencia= de sus accesos a las Bases de (atos +B(,. Para entender c:mo las sentencias !Q5 a$ectan a la e*ecuci:n de programas ABAP& es necesario entender la ar%uitectura del sistema %ue hay por de#a*o. 5os procesos de tra#a*o de un servidor de aplicaci:n est;n <conectados= al servidor de la B( como usuarios +clientes, durante el tiempo %ue el sistema 4/7 est; activo. El gestor de la B( +(ata (ase )anagement !ystem 6 (B)!, realia la cone'i:n entre usuarios y datos. "ada sistema de B( utilia un optimiador cuya tarea es crear el plan de e*ecuci:n para las sentencias !Q5 +por e*emplo determinar entre el uso de un >ndice en ve de leer en la B(,. Hay dos tipos de optimiadores? 9ptimiadores #asados en la norma? analian la estructura de una sentencia !Q5 +las partes !E5E"3 y WHE4E sin sus valores, y los >ndices. (espu@s usa un algoritmo para calcular %u@ m@todo usar para e*ecutar la sentencia. 9ptimiadores #asados en el coste? usan el procedimiento anterior pero tam#i@n utilian ta#las de estad>sticas. 5as ta#las de estad>sticas contienen los valores m;s #a*os y altos de los campos& o un histograma con la distri#uci:n de los datos en la ta#la. Este tipo de optimiadores me*oran el tiempo de acceso a las B(& pero tienen la desventa*a de %ue las ta#las de estad>sticas necesitan actualiarse peri:dicamente. +"onsultar Ane'o 7? <Aotas so#re las 3a#las de Estad>sticas=, Aota? !AP #a*o 9racle permite el uso del optimiador #asado en coste a partir de la release B.'. Anteriormente eran #asados en la norma. 1.2 4ecomendaciones Generales 1.2.1 "onsideraciones !AP6 ABAP Ao actualiar AUA"A la #ase de datos directamente mediante $unciones no desarrolladas u originales de !AP. Es decir& no utiliar nunca e'pl>citamente las instrucciones CA!E43& UP(A3E& )9(C.D o (E5E3E so#re ta#las est;ndar de !AP. (e#en utiliarse los procedimientos de actualiaci:n previstos por !AP como #atch6 input& direct input o call transaction. En el caso de tener desarrollos propios %ue incluyan de$inici:n de ta#las propias %ue crecen con el tiempo& tener previsto siempre la posi#ilidad de realiar un archivado de los datos propios o en su de$ecto& eliminaci:n de datos o#soletos %ue no interesa seguir teniendo en el sistema. +Aota? Ao es aconse*a#le acceder a datos de transacci:n s:lo con datos maestros Epor e*emplo a pedidos de la ta#la -BAF s:lo con el nGmero de cliente6& ya %ue siempre cogeremos m;s registros de los deseados. "onviene usar m;s campos Epor e*emplo la $echa6 para limitar el resultado. En el caso de utiliar programas e'ternos a !AP& como servidores 4." o clientes 4." tener en consideraci:n al posi#ilidad de realiar #alanceo de carga 3ener en cuenta la concurrencia de accesos si se realian programas para actualiar ta#las propias de$inidas por el cliente mediante la utiliaci:n de o#*etos de #lo%ueo. 5os accesos a la #ase de datos de#en evitar el realiar un H.ull 3a#le scanH de la misma. 5a programaci:n de la cl;usulas de acceso a la #ase de datos siempre de#en estar #asadas en >ndices& o en casos especiales de conveniencia& realiar una lectura secuencial de la ta#la. Pero si se %uiere acceder por >ndice hay %ue indicar en el predicado de la cl;usula todos los campos del >ndice conocidos por el programa. Por e*emplo? la ta#la -BAF de$inida con los campos? )AA(3 BE5A4 P9!A4 ...& y tiene un >ndice primario construido as>? )AA(3& BE5A4 y P9!A4I si en la cl;usula WHE4E no contiene el campo BE5A4& la B( no puede usar; el >ndice adecuadamente. El con*unto de instrucciones con !Q5 nativo o EJE"6!Q5 no es conveniente de $orma general ya %ue? Ao utilian los #u$$ers intermedios de !AP Pueden hacer la programaci:n dependiente del gestor de #ase de datos %ue se utilice. En ocasiones puede ser la Gnica alternativa en caso de tener %ue acceder desde un ABAP a una #ase de datos e'terna no6!AP& +por e*emplo acceso a una #ase de datos 9racle en A3 mediante 9(B",. Al codi$icar #ucles& diseKarlos de $orma %ue las condiciones %ue m;s $recuentemente sean verdaderas ocupen los niveles e'teriores del #ucle. Para e'presiones o evaluaciones l:gicas %ue incluyan el operador AA(& situar la condici:n %ue m;s $recuentemente sea $alsa en primer lugar. 3ener identi$icados de la manera m;s precisa y operativa posi#le cu;les son los procesos %ue no de#en ser e*ecutados en concurrencia con el online o con los momentos de mayor actividad online en el sistema. A modo de e*emplo normalmente la e*ecuci:n de programas %ue realicen "A55 34AA!A"3C9A de $orma masiva o lanamiento de #atch6inputs de#e estar limitada cuando se procesen de $orma concurrente con el on6 line. 1.2.2 Aormas generales para programaci:n !Q5 Bas;ndonos en la ar%uitectura de los sistemas 4/7& e'isten unas normas #;sicas y $undamentales %ue es necesario aplicar en programaci:n ABAP para %ue los accesos a las B( sean e$icientes. !on los siguientes? "onseguir un con*unto de respuestas pe%ueKo. Esto reduce? tanto la cantidad de memoria utiliada por el (B)! como la carga de la red cuando se trans$ieren los datos al servidor de aplicaci:n. Por e*emplo no usar select anidados sino L9CA! o -C!3A!. )inimiar la cantidad de datos a trans$erir 4estringir el nGmero de l>neas 4estringir el nGmero de columnas. Usar $unciones glo#ales +sum& average& minimun& ..., cuando los datos a usar sean s:lo para c;lculos. 3rans$erir los datos e'actos cuando se cam#ien l>neas de una ta#la. "on la sentencia UP(A3E para cam#iar l>neas& se de#er>a usar la cl;usula WHE4E para especi$icar las l>neas relevantes y la sentencia !E3 para cam#iar s:lo las columnas necesarias. )inimiar el nGmero de trans$erencias de datos "onviene reducir la carga de la red y del servidor de la B( minimiando el nGmero de veces %ue se accede a la B(? Evitar accesos repetidos. Evitar #ucles !E5E"3 anidados. Usar -ieMs y Loins. Evitar su#6preguntas en las cl;usulas WHE4E y HA-CAG. Usar ta#las internas en #ucles !E5E"3. Usar un cursor para leer los datos. Este nuevo m@todo se #asa en evitar la cl;usula CA39 de la sentencia !E5E"3 utiliando un cursor +9PEA "U4!94, y leyendo los datos l>nea a l>nea +.E3"H AEJ3 "U4!94,. Es necesario a#rir un nuevo cursor en cada paso del #ucle. )inimiar el tiempo de #Gs%ueda .ormular condiciones de #Gs%ueda por >ndices. Utiliar condiciones positivas +por e*emplo EQ y 5CFE, en ve de negativas +AE y A93 5CFE,. Evitar el operador A93. Ao che%uear por valores nulos +AU55,. Ao usar parte de un >ndice? al construir un >ndice de varias columnas el sistema puede usarlo aun%ue s:lo se especi$i%uen unas pocas columnas en la condici:n. 5a secuencia de las columnas en el >ndice es importante. Una columna s:lo podr; usarse en la consulta por >ndice si todas las columnas anteriores +en la de$inici:n del >ndice, se han especi$icado tam#i@n en la condici:n de #Gs%ueda. Evitar condiciones de #Gs%ueda comple*as 4educir la carga de la Bd 4ealiar el #u$$ering de ta#las so#re el servidor de aplicaci:n. 3ipos de ta#las m;s indicadas? 3a#las %ue se leen muy $recuentemente& 3a#las %ue cam#ian con muy poca $recuencia& 3a#las relativamente pe%ueKas +pocas l>neas& pocas columnas& columnas cortas,& 3a#las cuya actualiaci:n no es cr>tica en el tiempo. Por e*emplo ta#las de parametriaci:n y ta#las de condiciones? AJJJ& BJJJ& "JJJ& etc. Evitar la lectura repetida de los datos. Usar Bases de (atos 5:gicas. 1.7 4ecomendaciones 3ips N 3ricks por !AP Estas recomendaciones incluyen e*emplos reales& cuyo tiempo de respuesta puede ser medido %ue pretenden ilustrar los aspectos comentados en el punto anterior. Estas recomendaciones est;n localia#les en el sistema mediante? Herramientas O Work#ench ABAP O 3est O An;lisis 3mpo. E*ecuci:n O 3ips N 3ricks !e pretende indicar %ue e'isten herramientas en el sistema %ue nos pueden ayudar en momentos de duda a elegir un algoritmo o con*unto de instrucciones m;s adecuado %ue otro. !e e'trae una muestra a modo de e*emplo pero la lectura %ue de#e realiarse de este apartado es %ue esta in$ormaci:n de#e ser consultada de $orma online en caso de dudas o #Gs%ueda de sugerencias en el momento de realiar la programaci:n. 1.7.1 Cnstrucciones so#re la inter$a !AP6!Q5 En una cl;usula WHE4E& el operador l:gico A93 no est; soportado por los >ndices. Por e*emplo? WHE4E $echa PQ R1SSST212U es me*or %ue WHE4E A93 .E"HA VQ R1SSST212 !entencias !E5E"3 con "HE"F. Especi$icar siempre %ue sea posi#le las condiciones de selecci:n en la cl;usula WHE4E "on la instrucci:n !E5E"3 utiliar lista de campos en ve de !E5E"3 W con el $in de disminuir el tr;$ico en la red. 9#tenci:n de sumatorias& m;'imos& nGmero de $ilas& ... Utiliar operadores )AJ& "9UA3& A-E4AGE en la lista de campos en ve de realiarlos por programa. (isminuye el tr;$ico en la red. !i se procesan los datos una sola ve& es pre$eri#le tratarlos en el #ucle !E5E"3 ... EA(!E5E"3 %ue guardarlos en una ta#la interna para posteriormente tratar la ta#la interna mediante 599P. !E5E"3 mediante vistas. Es conveniente sustituir los selects anidados por el uso de vistas. !E5E"3 W .49) ((T1- WHE4E (9)AA)E 5CFE H"HA4XH AA( ((5AAGUAGE Q !D65AAGU. EA(!E5E"3. es pre$eri#le a ? !E5E"3 W .49) ((T15 WHE4E (9)AA)E 5CFE H"HA4XH AA( A!B59"A5 Q HAH. !E5E"3 !CAG5E W .49) ((T13 WHE4E (9)AA)E Q ((T156(9)AA)E AA( A!B59"A5 Q HAH AA( A!B-E4! Q ((T156A!B-E4! AA( ((5AAGUAGE Q !D65AAGU. 3ratamiento con arrays Cnserciones con array y actualiaciones de columnas CA!E43 "U!39)E4! .49) 3AB5E ita# es pre$eri#le a ? 599P A3 3AB. CA!E43 CA39 "U!39)E4! -A5UE! 3AB. EA(599P. Utiliar actualiaciones de columna en ve de modi$icaciones de $ila UP(A3E !.5CGH3 !E3 !EA3!9"" Q !EA3!9"" 6 1. es pre$eri#le a? !E5E"3 W .49) !.5CGH3. !.5CGH 36!EA3!9"" Q !.5CGH36!EA"!9"" 61. UP(A3E !.5CGH3. EA(!E5E"3. Es pre$eri#le usar la sentencia !E5E"3 con opci:n CA39 %ue utiliar la sentencia APPEA( dentro del #ucle !E5E"3 ... EA(!E5E"t 1.7.2 3ratamiento de cadenas de caracteres Usar los operadores "9& "A& "!& etc& en lugar de programarlos. En strings largos& los tiempos de "PU aumentan considera#lemente Ao programar las sentencias para truncar strings o concatener& sino utiliar la instrucci:n !P5C3 o "9A"A3EAA3E 1.7.7 3ratamiento de ta#las internas !e recomienda el uso de la instrucci:n "955E"3 a partir de la release 7.T de !AP para construcci:n de ta#las acumulativas. Accesos por clave 4EA( 3AB5E 3AB WC3H FED F Q HJH BCAA4D !EA4"H es pre$eri#le a? )9-E !PA"E 39 3AB. 3AB6F Q HJH. 4EA( 3AB5E 3AB BCAA4D !EA4"H. Cntentar siempre acceder a una ta#la interna ya ordenada. 4EA( 3AB5E WC3H FED BCAA4D !EA4"H. es pre$eri#le a? 4EA( 3AB5E WC3H FED. En 599P de ta#las utiliar la cl;usula WHE4E 599P A3 3AB WHE4E F Q F-A5. ..... EA(599P es pre$eri#le a? 599P A3 3AB. "HE"F 3AB6F Q F-A5 ..... EA(599P. "onstrucci:n de ta#las ordenadas Ao utiliar la instrucci:n APPEA( ita# !943E( BD Utiliar el procedimiento de? 1Y 5lenar la ta#la& 2Y 9rdenar la ta#la 4E.4E!H 3ABZ(E!3. 599P A3 3ABZ!4". APPEA( 3ABZ!4" 39 3ABZ(E!3. EA(599P. !943 3ABZ(E!3 BD F es pre$eri#le a? 4E.4E!H 3ABZ(E!3. 599P A3 3ABZ!4". 4EA( 3AB5E 3ABZ(E!3 W33H FED FQ .... CA!E43 3ABZ!4" CA39 3ABZ(E!3 CA(EJ !D6CA(EJ. EA(599P. "onstrucci:n de ta#la sin duplicados Es pre$eri#le #orrar las entradas duplicadas una ve construida la ta#la utiliando el procedimiento de 1Y 6 5lenar la ta#la& 2Y 9rdenar la ta#la& 7Y Borrar duplicados 4E.4E!H 3ABZ(E!3. 599P A3 3ABZ!4" APPEA( 3ABZ!4" 39 3ABZ(E!3. EA(599P !943 3ABZ(E!3 BD F. (E5E3E A(LA"EA3 (UP5C"A3E! .49) 3ABZ(E!3. es pre$eri#le a? 4E.4E!H 3ABZ(E!3. 599P A3 3ABZ!4". 4EA( 3AB5E 3ABZ(E!3 WC3H FED FQ 3ABZ!4"6F. C. !D6!UB4" VP T . CA!E43 3ABZ!4" CA39 3ABZ(E!3 CA(EJ !D6CA(EJ. EA(C.. EA(599P. Uso de ;reas de tra#a*o evitando instrucciones )9-E "opia de ta#las internas? utiliar asignaci:n directa de varia#les. 3ABZ(E!3[ \ Q 3ABZ!4"[ \ es pre$eri#le a ? 4E.4E!H 3ABZ(E!3. 599P A3 3ABZ!4" CA39 3ABZ(E!3. APPEA( 3ABZ(E!3. EA(599P. "omparaci:n de ta#las internas? (os ta#las internas son iguales cuando tienen el mismo nGmero de l>neas y coinciden una a una. C. 3AB1[ \ Q 3AB2 [ \ EA(C.. Es pre$eri#le a realiar una #arrido secuencial de una ta#la e ir comparando con la entrada e%uivalente en la otra ta#la. Para ordenar ta#las internas& especi$icar los campos so#re los %ue de#e veri$icarse la ordenaci:n. !943 C3AB BD .CE5(1 .CE5(2. es pre$eri#le a? !943 C3AB. Para averiguar el nGmero de registros en una ta#la interna& utiliar la instrucci:n (E!"4CBE 3AB5E C3AB 5CAE! "Z5CAEA!. es pre$eri#le a? 599P A3 C3AB. "Z5CAEA! Q "Z5CAEA! ] 1 EA(599P. L9CA de ta#las& #ucles anidados Evitar recorridos secuenciales y plantearse accesos por >ndice en la segunda ta#la o ta#la m;s interna del #ucle. !uponiendo? ta#las ordenadas& 3AB2 contiene s:lo entradas %ue e'isten en 3AB1. C2 Q 1. 599P A3 3AB1. 599P A3 3AB2 .49) C2. C. 3AB26F VP 3AB16F. C2 Q !D63ABCJ. EJC3. EA(C.. ^ ... EA(599P. EA(599P. es pre$eri#le a ? 599P A3 3AB1. 599P A3 3AB2 WHE4E F Q 3AB16F. EA(599P. EA(599P. Cnserci:n en una ta#la desde otra APPEA( 5CAE! 9. 3ABZ!4" 39 3ABZ(E!3. es pre$eri#le a? 599P A3 3ABZ!4". APPEA( 3ABZ!4" 39 3ABZ(E!3. EA(599P. Borrado de l>neas. Uso de >ndices para (E5E3E 3ABZ(E!3 .49) B_T 39 __T. es pre$eri#le a? (9 1T1 3C)E!. (E5E3E 3ABZ(E!3 CA(EJ B_T. EA((9. (E5E3E 3ABZ(E!3 WHE4E F Q F-A5. Es pre$eri#le a? 599P A3 3ABZ(E!3 WHE4E F Q F-A5 (E5E3E 3ABZ(E!3 EA(599P 1.7.B 3ratamiento de par;metros en rutinas y $ield6sym#ols Especi$icar el tipo de par;metros en las rutinas? !i se especi$ica el tipo de los par;metros $ormales de las rutinas en el c:digo $uente del programa& el compilador de ABAP/B puede optimiar me*or el $uente. Adem;s& el riesgo de utiliar secuencias err:neas de par;metros disminuye. (e$inir tipo en los $ield6sym#ols !i se especi$ica el tipo del $ield6sym#ol& el compilador puede me*orar el rendimiento del programa .CE5(6!D)B95!? 3DPE C. Es pre$eri#le a? .CE5(6!D)B95!? . 1.7._ )ane*o de varia#les y tipos Utiliar varia#les de tipo C para campos >ndices de #ucle& no de tipo P. !i los contenidos de las varia#les van a ser num@ricas& de$inirlas tipo C. En las asignaciones utiliar constantes con tipo me*or %ue literales. "9A!3AA3!? PC 3DPE . -A5UE H7.1B1_S2/_7_8S`S72H. (A3A? .59A3 3DPE .. .59A3 Q PC. es pre$eri#le a? (A3A? .59A3 3DPE .. .59A3 Q H7.1B1_S2/_7_8S`S72H. En c;lculos aritm@ticos utiliar varia#les de tipo P. (A3A? P1 3DPE P -A5UE H127B_/`8ST127B_H& P2 3DPE P -A5UE H_B721TS8`/_B721H& P1 Q P1 ] P2. es pre$eri#le a? (A3A? A1+1_, 3DPE A -A5UE H127B_/`8ST127B_H& A2+1_, 3DPE A -A5UE H_B721TS8`/_B721H& A1 Q A1 ] A2. En c;lculos aritm@ticos no meclar varia#les de varios tipos a no ser a#solutamente necesario& de esta $orma evitaremos innecesarias conversiones de tipos. 1.B E'posici:n de !entencias !Q5 <caras= 1.B.1 (e$inici:n !e de$inen de esta manera a%uellas sentencias %ue? (esde el punto de vista del usuario <el relo* de arena aparece en pantalla y permanece ah> un largo tiempo= (esde el punto de vista del sistema? este tiene %ue leer muchos #lo%ues de datos #ien del #u$$er +supone una carga para el procesador,& o #ien del disco duro +lo %ue supone una so#recarga para el sistema Cnput/9utput,. 1.B.2 3ipos Para todas las B( y para todas las aplicaciones !AP y no6!AP& las sentencias !Q5 costosas pueden agotar los recursos del sistema operativo y causar graves pro#lemas de rendimiento del sistema entero. E'isten& #;sicamente& dos tipos de sentencias !Q5 llamadas <caras= teniendo en cuenta el consumo de los recursos del sistema? !EA3EA"CA! !Q5 "A4A! (E 3CP9 1? !e procesan un gran nGmero de registros pero el rendimiento es #ueno. )@todo de acceso adecuado Por e*emplo? !Q5 3race? P 1T .etches por instrucci:n. !EA3EA"CA! !Q5 "A4A! (E 3CP9 2? !e procesa un nGmero pe%ueKo de registros pero hay un gran nGmero de lecturas por registro o un elevado tiempo de respuesta por registro. 5a estrategia de #Gs%ueda no es e$iciente& el m@todo de acceso no es adecuado. Por e*emplo? Area de !Q5 compartida? P 1TT peticiones de #u$$er por registro !Q5 3race? duraci:n de cada .etch P _TT ms. 5os datos %ue se necesitan para analiar sentencias !Q5 son? Programas +para sa#er donde cam#iar el c:digo,. !entencia !Q5 costosa. 3a#la implicada. Cndice utiliado. 1.B.7 (etecci:n 5os tiempos de espera largos son el resultado del tiempo %ue emplea la B( en devolver los datos pedidos por 4/7 y el %ue emplea 4/7 en devolver la siguiente pantalla al usuario. a":mo detectar las sentencias costosasb Para encontrar el nom#re del report o transacci:n %ue usa la sentencia !Q5 se puede utiliar? 3ransacci:n !)_T? -isualiaci:n de procesos de tra#a*o. +A partir de la ver. B./B tam#i@n con la transacci:n !3TB,. 3ransacci:n !3T7? 4eporting de 3ransacciones& carga de tra#a*o del sistema. +-er m;s adelante el punto /.2.B Workload )onitor,. Para encontrar los nom#res de las ta#las accedidas y la sentencia !Q5? 3ransacci:n !3T_? <!%l 3race=. 3ransacci:n !3TB? Area !Q5 compartida& An;lisis de rendimiento de la B(. 3ransacci:n !)_T? -isualiaci:n de procesos de tra#a*o& anotamos el PC( del proceso correspondiente y a continuaci:n vamos a la transacci:n !3TB?)onitor de procesos de la B(. Para encontrar los >ndices implicados& usar la opci:n EJP5ACA en? !Q5 3race. Area !Q5 compartida. )onitor de proceso de la B(. +-er Ane'o B <a(e (:nde procede la sentencia !Qb=,. 1.B.B "lasi$icaci:n Analiando los dos tipos de sentencias a trav@s de !Q5 3race +transacci:n !3T_, apreciamos? Para el primer tipo el tiempo medio de duraci:n es de V _ ms por registro o V 1TT ms por .E3"H. 5os datos se trans$ieren con un rendimiento :ptimo. Para el segundo tipo la duraci:n de un .E3"H es P de _TT ms. !i consultamos el Area !Q5 compartida +transacci:n !3TBI )enG de an;lisis detalladoI Peticiones !Q5, para los dos tipos de sentencias anteriores& encontramos? Para el tipo 1? V _T peticiones al #u$$er por registro. Esta es una relaci:n :ptima entre el nGmero de registros procesados y el nGmero de #lo%ues de datos escaneados. Para el tipo 2? P _T. Esta no es una relaci:n :ptima y es consecuencia de una estrategia de #Gs%ueda de$iciente. 1.B._ !oluciones Programas est;ndar de !AP? !oluci:n ? "onsultar notas del 9!!. !EA3EA"CA! (E5 3CP9 1? Pro#lema ? (emasiados registros a trans$erir. !oluci:n ? 4e6escri#ir el c:digo ABAP. +-er apartado 1.B.2 <Aormas Generales=,. !EA3EA"CA! (E5 3CP9 2? Pro#lema 1 ? Ao e'isten los >ndices adecuados. !oluci:n ? "am#iar el c:digo? aKadir campos conocidos& etc. "am#iar algGn >ndice e'istente& en ve de crear uno nuevo. "rear un >ndice nuevo +analiar antes el histograma de distri#uci:n de los datos con la transacci:n (BT_,. Quitar un >ndice +especialmente en versiones 7.' de 9racle con optimiadores en modo normas,. 9 Pro#lema 2 ? El 9ptimiador de la B( A9 usa el acceso correcto. !oluci:n ? "he%uear la ta#la de estad>sticasI si la cl;usula WHE4E es demasiado comple*a& re6escri#ir el c:digo