SAP ABAP程序性能优化
2005-02-02 17:03
549 查看
PerformanceTuning |
ContributedbyForallentriesTheforallentriescreatesawhereclause,wherealltheentriesinthedrivertablearecombinedwithOR.Ifthenumberofentriesinthedrivertableislargerthanrsdb/max_blocking_factor,severalsimilarSQLstatementsareexecutedtolimitthelengthoftheWHEREclause.TheplusLargeamountofdataMixingprocessingandreadingofdata Fastinternalreprocessingofdata FastTheMinusDifficulttoprogram/understand Memorycouldbecritical(useFREEorPACKAGEsize)SomestepsthatmightmakeFORALLENTRIESmoreefficient:Removingduplicatesfromthedrivertable Sortingthedrivertable Ifpossible,convertthedatainthedrivertabletorangessoaBETWEENstatementisusedinsteadofandORstatement: FORALLENTRIESINi_tab WHEREmykey>=i_tab-lowand mykey<=i_tab-high. NestedselectsTheplus:SmallamountofdataMixingprocessingandreadingofdata Easytocode-andunderstandTheminus:Largeamountofdata whenmixedprocessingisn’tneeded Performancekillerno.1 SelectusingJOINSTheplusVerylargeamountofdataSimilartoNestedselects-whentheaccessesareplannedbytheprogrammer Insomecasesthefastest NotsomemorycriticalTheminusVerydifficulttoprogram/understand Mixingprocessingandreadingofdatanotpossible UsetheselectioncriteriaSELECT*FROMSBOOK. CHECK:SBOOK-CARRID='LH'AND SBOOK-CONNID='0400'. ENDSELECT. SELECT*FROMSBOOK WHERECARRID='LH'AND CONNID='0400'. ENDSELECT. UsetheaggregatedfunctionsC4A='000'. SELECT*FROMT100 WHERESPRSL='D'AND ARBGB='00'. CHECK:T100-MSGNR>C4A. C4A=T100-MSGNR. ENDSELECT. SELECTMAX(MSGNR)FROMT100INTOC4A WHERESPRSL='D'AND ARBGB='00'. SelectwithviewSELECT*FROMDD01L WHEREDOMNAMELIKE'CHAR%' ANDAS4LOCAL='A'. SELECTSINGLE*FROMDD01T WHEREDOMNAME=DD01L-DOMNAME ANDAS4LOCAL='A' ANDAS4VERS=DD01L-AS4VERS ANDDDLANGUAGE=SY-LANGU. ENDSELECT. SELECT*FROMDD01V WHEREDOMNAMELIKE'CHAR%' ANDDDLANGUAGE=SY-LANGU. ENDSELECT. SelectwithindexsupportSELECT*FROMT100 WHEREARBGB='00' ANDMSGNR='999'. ENDSELECT. SELECT*FROMT002. SELECT*FROMT100 WHERESPRSL=T002-SPRAS ANDARBGB='00' ANDMSGNR='999'. ENDSELECT. ENDSELECT. Select…IntotableREFRESHX006. SELECT*FROMT006INTOX006. APPENDX006. ENDSELECT SELECT*FROMT006INTOTABLEX006. SelectwithselectionlistSELECT*FROMDD01L WHEREDOMNAMELIKE'CHAR%' ANDAS4LOCAL='A'. ENDSELECT SELECTDOMNAMEFROMDD01L INTODD01L-DOMNAME WHEREDOMNAMELIKE'CHAR%' ANDAS4LOCAL='A'. ENDSELECT KeyaccesstomultiplelinesLOOPATTAB. CHECKTAB-K=KVAL. "... ENDLOOP. LOOPATTABWHEREK=KVAL. "... ENDLOOP. CopyinginternaltablesREFRESHTAB_DEST. LOOPATTAB_SRCINTOTAB_DEST. APPENDTAB_DEST. ENDLOOP. TAB_DEST[]=TAB_SRC[]. ModifyingasetoflinesLOOPATTAB. IFTAB-FLAGISINITIAL. TAB-FLAG='X'. ENDIF. MODIFYTAB. ENDLOOP. TAB-FLAG='X'. MODIFYTABTRANSPORTINGFLAG WHEREFLAGISINITIAL. DeletingasequenceoflinesDO101TIMES. DELETETAB_DESTINDEX450. ENDDO. DELETETAB_DESTFROM450TO550. Linearsearchvs.binaryREADTABLETABWITHKEYK='X'. READTABLETABWITHKEYK='X'BINARYSEARCH. ComparisonofinternaltablesDESCRIBETABLE:TAB1LINESL1, TAB2LINESL2. IFL1<>L2. TAB_DIFFERENT='X'. ELSE. TAB_DIFFERENT=SPACE.
READTABLETAB2INDEXSY-TABIX. IFTAB1<>TAB2. TAB_DIFFERENT='X'.EXIT. ENDIF. ENDLOOP. ENDIF. IFTAB_DIFFERENT=SPACE. "... ENDIF. IFTAB1[]=TAB2[]. "... ENDIF. ModifyselectedcomponentsLOOPATTAB. TAB-DATE=SY-DATUM. MODIFYTAB. ENDLOOP. WA-DATE=SY-DATUM. LOOPATTAB. MODIFYTABFROMWATRANSPORTINGDATE. ENDLOOP. AppendingtwointernaltablesLOOPATTAB_SRC. APPENDTAB_SRCTOTAB_DEST. ENDLOOP APPENDLINESOFTAB_SRCTOTAB_DEST. DeletingasetoflinesLOOPATTAB_DESTWHEREK=KVAL. DELETETAB_DEST. ENDLOOP DELETETAB_DESTWHEREK=KVAL. ToolsavailableinSAPtopin-pointaperformanceproblem·Theruntimeanalysis(SE30) ·SQLTrace(ST05) ·TipsandTrickstool ·Theperformancedatabase OptimizingtheloadofthedatabaseUsingtablebufferingUsingbufferedtablesimprovestheperformanceconsiderably.Notethatinsomecasesastatementcannotbeusedwithabufferedtable,sowhenusingthesestatementsthebufferwillbebypassed.Thesestatementsare:SelectDISTINCTORDERBY/GROUPBY/HAVINGclause AnyWHEREclausethatcontainsasubqueryorISNULLexpression JOINs ASELECT...FORUPDATEIfyouwanttoexplicitlybypassthebuffer,usetheBYPASSBUFFERadditiontotheSELECTclause. UsetheABAPSORTClauseInsteadofORDERBYTheORDERBYclauseisexecutedonthedatabaseserverwhiletheABAPSORTstatementisexecutedontheapplicationserver.Thedatabaseserverwillusuallybethebottleneck,sosometimesitisbettertomovethesortfromthedatabaseservertotheapplicationserver.Ifyouarenotsortingbytheprimarykey(E.g.usingtheORDERBYPRIMARYkeystatement)butaresortingbyanotherkey,itcouldbebettertousetheABAPSORTstatementtosortthedatainaninternaltable.Notehoweverthatforverylargeresultsetsitmightnotbeafeasiblesolutionandyouwouldwanttoletthedatabaseserversortit.AvoidtheSELECTDISTINCTStatementAswiththeORDERBYclauseitcouldbebettertoavoidusingSELECTDISTINCT,ifsomeofthefieldsarenotpartofanindex.InsteaduseABAPSORT+DELETEADJACENTDUPLICATESonaninternaltable,todeleteduplicaterows. |
相关文章推荐
- SAP ABAP程序性能优化
- SAP ABAP程序性能优化 2
- ABAP:SAP报表性能的优化
- SAP ABAP程序优化方法
- SAP ABAP程序效率优化 Perfomance Tune
- SAP ABAP 性能优化技巧 — 正确使用”move” 语句
- sap abap 性能优化(一)
- ABAP程序性能优化
- ABAP:SAP报表性能的优化
- SAP ABAP程序优化-多线程并行处理
- SAP ABAP程序优化方法
- ABAP程序的性能优化啊.
- ABAP:SAP报表性能的优化
- SAP ABAP程序优化-多线程并行处理
- 一些优化ABAP程序性能的方法
- SAP ABAP程序优化方法(搜集自论坛)
- SAP ABAP程序优化方法(搜集自论坛)
- abap性能优化——利用凭证的number ranger提高abap程序性能
- SAP ABAP程序效率优化 Perfomance Tune
- SAP ABAP程序效率优化 Perfomance Tune