亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        ABAP程序性能優(yōu)化研究

        2018-01-29 13:04:40姚振郭駿劉濤張禾良方志遠(yuǎn)
        無線互聯(lián)科技 2017年18期
        關(guān)鍵詞:程序

        姚振+郭駿+劉濤+張禾良+方志遠(yuǎn)

        摘要:文章根據(jù)安徽省電力公司ERP系統(tǒng)在運(yùn)行過程對(duì)二次開發(fā)程序性能優(yōu)化方法進(jìn)行了總結(jié),介紹了ABAP程序性能分析方法,詳述ABAP程序常用和非常用性能優(yōu)化方法,并對(duì)程序優(yōu)化后的運(yùn)行效果進(jìn)行了總結(jié)。

        關(guān)鍵詞:ABAP;程序;性能優(yōu)化

        安徽省電力公司企業(yè)資源計(jì)劃(EnterpriseResourcePlanning,ERP)項(xiàng)目自2008年啟動(dòng)實(shí)施以來,幫助安徽省電力公司實(shí)現(xiàn)了人力資源管理、財(cái)務(wù)管理、物資管理、項(xiàng)目管理、設(shè)備管理及其相關(guān)報(bào)表與分析等功能,系統(tǒng)設(shè)計(jì)采用SAP系統(tǒng)(SystemApplicationandProductsinDataProcessing,SAP)R/3系統(tǒng)架構(gòu)[1]。SAP具有強(qiáng)大的可配置功能,但對(duì)于一些特殊的業(yè)務(wù)需求,需要業(yè)務(wù)人員配合高級(jí)企業(yè)應(yīng)用編程語言(AdvancedBusinessApplicationProgmmming,ABAP)開發(fā)人員進(jìn)行二次開發(fā),隨著系統(tǒng)數(shù)據(jù)量的增長,一些二次開發(fā)程序的運(yùn)行速度變得越來越慢,有的甚至?xí)^系統(tǒng)最大允許運(yùn)行時(shí)長而超時(shí),不僅影響業(yè)務(wù)應(yīng)用的效率也影響了用戶體驗(yàn)[2]。因此,對(duì)二次開發(fā)程序開展性能優(yōu)化工作是非常有必要的。

        1ABAP程序性能分析的手段

        對(duì)ABAP程序性能進(jìn)行分析的方法很多,比如事務(wù)代碼STAD,SE30和ST05等,但目前人們使用最多的是用ST12來分析ABAP程序性能。

        ST12的User模式可以跟蹤某一個(gè)用戶,建議不跟蹤自己。對(duì)于己經(jīng)開始執(zhí)行的程序,可以使用Workprocess模式進(jìn)行跟蹤,還能設(shè)置跟蹤開始和結(jié)束時(shí)間。Currentmode模式是自己執(zhí)行指定程序并同時(shí)進(jìn)行跟蹤。根據(jù)ST12跟蹤分析結(jié)果,ABAP運(yùn)行時(shí)間過長,一般來說是跟ABAP程序代碼運(yùn)行效率低下有關(guān);Database過長則一般是跟大量直接讀取數(shù)據(jù)庫有關(guān)系,比如LOOP中Select表數(shù)據(jù)。Nettime降序排列,找出花費(fèi)時(shí)間最多的代碼,然后針對(duì)該代碼進(jìn)行優(yōu)化,對(duì)于單純的報(bào)表程序,優(yōu)化后最好對(duì)于同樣的輸入條件并保證數(shù)據(jù)量沒有太大變化的情況下進(jìn)行性能比較[3]。

        2ABAP程序常用性能優(yōu)化方法

        在Loop循環(huán)中使用Where條件減少循環(huán)次數(shù),因?yàn)闇p少循環(huán)次數(shù)可以減少CPU操作次數(shù),減少操作時(shí)間。

        避免使用Select-EndSelect語句:該語句其實(shí)是一個(gè)循環(huán)體,在數(shù)據(jù)量很大時(shí)會(huì)嚴(yán)重影響程序運(yùn)行速度,而且語句在程序運(yùn)行過程中會(huì)始終保持與數(shù)據(jù)連接,相當(dāng)于在一個(gè)循環(huán)中反復(fù)訪問數(shù)據(jù)庫,很容易成為程序性能的瓶頸,建議使用一次性Table賦值。避免使用Select*語句,*代表返回所有

        字段值,從編程習(xí)慣來說,一個(gè)優(yōu)秀的程序員也不應(yīng)該獲取自己不需要的數(shù)據(jù),應(yīng)只返回需要的字段的值。

        Read內(nèi)表建議盡量使用BinarySearch二分法查找,尤其要注意的一點(diǎn)的是,在使用二分法之前一定要對(duì)內(nèi)表進(jìn)行排序,否則有可能找不到正確數(shù)據(jù)。

        對(duì)Loop嵌套循環(huán),盡量帶Where條件,但如果數(shù)據(jù)量很大,可能帶了條件還是會(huì)很慢,甚至成為程序運(yùn)行緩慢的瓶頸,這種情況建議根據(jù)BinarySearch二分法定位位置,然后再Loop,會(huì)大大提升查詢速度。

        Jom連接使用:用Jom進(jìn)行表連接使用很頻繁,但簇表不能直接使用Jom,比如BSEG表,如果要查詢BSEG表數(shù)據(jù),只能直接查詢。進(jìn)行表關(guān)聯(lián)時(shí)建議使用InnerJoin,無特殊業(yè)務(wù)需要不要使用LeftJoin,因?yàn)镮nnerJoin只連接匹配的行,而LeftJoin則會(huì)包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),所以使用InnerJom內(nèi)連接會(huì)顯著降低系統(tǒng)的負(fù)載,提升程序性能。需注意的一點(diǎn)是Jom超過3個(gè)表會(huì)出現(xiàn)性能問題,超過3個(gè)建議使用ForAllEntriesIn,再在Loop中通過二分法來Read內(nèi)表獲取需要的數(shù)據(jù)。

        關(guān)于ForAllEntriesIn的使用:一定要首先判斷內(nèi)表是否為空,如果為空,系統(tǒng)會(huì)視為無條件全表查詢,如果是數(shù)據(jù)量不大的表,影響可能并不是很大,但如果是數(shù)據(jù)量非常大的表,比如BSEG和MSEG表,則會(huì)嚴(yán)重影響系統(tǒng)性能;當(dāng)內(nèi)表數(shù)據(jù)比較多時(shí)建議對(duì)其查詢條件排序去重,盡量去掉條件重復(fù)項(xiàng),因?yàn)橄到y(tǒng)處理的時(shí)候是在Where中使用OR來查詢數(shù)據(jù),如果數(shù)據(jù)太多會(huì)占用大量系統(tǒng)內(nèi)存。

        關(guān)于索引的使用:在對(duì)表進(jìn)行查詢時(shí)如果表中有索引盡量在Where查詢條件中使用索引。使用索引的優(yōu)點(diǎn)是可以使對(duì)應(yīng)表的SQL語句執(zhí)行得更快,缺點(diǎn)是會(huì)占用額外的數(shù)據(jù)庫空間,還會(huì)降低數(shù)據(jù)修改和插入的速度,所以新建索引需要考慮必要性和實(shí)用性,并非越多越好,建議盡量使用表中己有的索引。對(duì)于字段多而且數(shù)據(jù)量很大的系統(tǒng)標(biāo)準(zhǔn)表,比如MSEG表,庫存和財(cái)務(wù)的數(shù)據(jù)均存儲(chǔ)在該表,在新建索引時(shí)更要慎重。創(chuàng)建索引時(shí)需考慮字段的順序,客戶端MANDT必須放在第一位,其他字段順序根據(jù)業(yè)務(wù)實(shí)際需要來確定,且索引字段不宜過多,建議不超過5個(gè)。在Where的查詢條件中字段的順序最好跟索引里面的關(guān)鍵字保持一致,否則索引可能無效。

        按時(shí)間區(qū)間獲取數(shù)據(jù):以PROJ表為例,如果一次性取出所有數(shù)據(jù),后續(xù)再關(guān)聯(lián)PRPS,MSEG等表查詢其他數(shù)據(jù),運(yùn)行速度可能非常慢,但如果根據(jù)ERDAT(創(chuàng)建時(shí)間)分時(shí)間區(qū)間如20170101到20170331查詢,查詢速度提升了一個(gè)等級(jí)。

        適當(dāng)以空間換時(shí)間:以MSEG表為例,退料總金額只能從該表查詢數(shù)據(jù),使用常規(guī)優(yōu)化方法根本無法滿足業(yè)務(wù)需要,經(jīng)分析只需獲取BWART(移動(dòng)類型)為222的數(shù)據(jù),數(shù)據(jù)總計(jì)30萬條,一次性查詢數(shù)據(jù)到內(nèi)表二分法排序Read,速度提升幾十倍。使用完成后應(yīng)及時(shí)清空釋放內(nèi)表所占用的空間[4]。

        3ABAP程序其他性能優(yōu)化方法

        在安徽省電力公司ERP系統(tǒng)中有很多二次開發(fā)的報(bào)表,有些報(bào)表運(yùn)行非常耗時(shí),采用常規(guī)優(yōu)化方法己經(jīng)無法進(jìn)一步提升運(yùn)行速度,這就需要采用一些其他的非常規(guī)技術(shù)手段來進(jìn)行優(yōu)化。endprint

        SAP系統(tǒng)并未限制用戶登錄次數(shù),一個(gè)用戶可以多機(jī)登錄系統(tǒng)。比如項(xiàng)目創(chuàng)建程序是通過導(dǎo)入EXCEL模板數(shù)據(jù)完成項(xiàng)目創(chuàng)建,有的用戶多機(jī)登錄,同時(shí)打開多個(gè)窗口導(dǎo)入數(shù)據(jù),并發(fā)數(shù)過多導(dǎo)致服務(wù)器工作進(jìn)程資源占用過大,NRIV表無法及時(shí)釋放。此情況無法通過程序優(yōu)化達(dá)到應(yīng)有的效果,因?yàn)轫?xiàng)目創(chuàng)建調(diào)用的是標(biāo)準(zhǔn)函數(shù),無法對(duì)標(biāo)準(zhǔn)程序進(jìn)行優(yōu)化,但可以采用限制程序的運(yùn)行個(gè)數(shù)來控制并發(fā)數(shù),減輕服務(wù)器和數(shù)據(jù)庫壓力。

        控制單個(gè)用戶執(zhí)行個(gè)數(shù)。如用戶正在運(yùn)行程序,提示用戶“該程序同時(shí)只能運(yùn)行一個(gè),您己經(jīng)在運(yùn)行該程序”。實(shí)現(xiàn)方法如下:首先調(diào)用系統(tǒng)標(biāo)準(zhǔn)函數(shù)“ENQUEUE_ESINDX”,該函數(shù)可判斷程序是否鎖定,如果程序己經(jīng)在運(yùn)行,再調(diào)用系統(tǒng)標(biāo)準(zhǔn)函數(shù)“ENQUE_READ”,根據(jù)返回的TABLE值ENQ,循環(huán)ENQ內(nèi)表,如果GUNAME等于當(dāng)前用戶名,則表示用戶己經(jīng)在執(zhí)行該程序。

        控制程序報(bào)表執(zhí)行總數(shù)。自定義新建一個(gè)配置表,新增程序名稱和最大允許同時(shí)執(zhí)行次數(shù)兩列,例如報(bào)表A,100,表示報(bào)表A最多只能同時(shí)運(yùn)行100個(gè),超過該數(shù)量系統(tǒng)提示“服務(wù)器達(dá)到最大會(huì)話數(shù),請(qǐng)稍候再試”信息。實(shí)現(xiàn)方法如下:在程序中調(diào)用系統(tǒng)標(biāo)準(zhǔn)函數(shù)“TH_WPINFO”,根據(jù)TABLE返回值WPLIST,再循環(huán)WPLIST內(nèi)表,根據(jù)WP_REPORT值等于當(dāng)前程序名來匯總,如果等于100說明己達(dá)最大值,否則允許用戶繼續(xù)執(zhí)行。

        為盡量減少并發(fā)數(shù)過多影響系統(tǒng)性能,建議根據(jù)實(shí)際情況在代碼中適當(dāng)加入“WAITUPTONSECONDS”語句,強(qiáng)制增加等待時(shí)間。該語句對(duì)在LOOP循環(huán)中調(diào)用BAPI過賬特別有效,比如調(diào)用“BAPI_GOODSMVT_CREATE”函數(shù)生成物料憑證。

        對(duì)于實(shí)時(shí)性要求不高但查詢比較耗時(shí)的報(bào)表可以考慮把程序放到后臺(tái)運(yùn)行。實(shí)現(xiàn)方法如下:首先調(diào)用系統(tǒng)標(biāo)準(zhǔn)函數(shù)“JOB_OPEN”新建一個(gè)后臺(tái)作業(yè),再執(zhí)行計(jì)算邏輯,最后調(diào)用系統(tǒng)標(biāo)準(zhǔn)函數(shù)“J0B_CL0SE”關(guān)閉后臺(tái)作業(yè)[5]。

        4結(jié)語

        本文對(duì)人們?cè)谌粘9ぷ髦械腁BAP程序性能優(yōu)化的常見和非常見的性能優(yōu)化方法進(jìn)行了總結(jié),程序優(yōu)化后運(yùn)行速度有了顯著的提升,優(yōu)化效果明顯。但也應(yīng)考慮到程序優(yōu)化不是萬能的,僅僅依靠程序優(yōu)化并不能完全解決程序性能問題。

        影響ERP系統(tǒng)運(yùn)行速度的因素很多,比如網(wǎng)絡(luò)的傳輸速率,影響網(wǎng)絡(luò)傳輸速率的因素主要有帶寬、時(shí)延和丟包;Oracle數(shù)據(jù)庫性能,通過參數(shù)的調(diào)整達(dá)到性能的優(yōu)化;Basis系統(tǒng)性能優(yōu)化和應(yīng)用服務(wù)器硬件配置等。為了進(jìn)一步提升系統(tǒng)性能,應(yīng)該把以上這些因素都考慮到。

        [參考文獻(xiàn)]

        [1]黃佳.SAP程序設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2005.

        [2]李娜娜,李長海.ABAP編程中提高效率的幾個(gè)技巧[J].數(shù)字技術(shù)與應(yīng)用,2010(4):37-38.

        [3]潘吳,易澤湘.基于SAPR/3的ERP技術(shù)研究與應(yīng)用[J]計(jì)算機(jī)技術(shù)與發(fā)展,2006(7):59-60.

        [4]于慧,廖華元,陳剛.提高SAP系統(tǒng)ABAP程序性的方法研究[J].中國科技信息,2013(23):91-94.

        [5]鄒玉龍,王昕蟲.SAPABAP程序優(yōu)化方法的研究及應(yīng)用[J].電腦知識(shí)與技術(shù),2011(22):5496-5498.endprint

        猜你喜歡
        程序
        給Windows添加程序快速切換欄
        電腦愛好者(2020年6期)2020-05-26 09:27:33
        試論我國未決羈押程序的立法完善
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        英國與歐盟正式啟動(dòng)“離婚”程序程序
        基于VMM的程序行為異常檢測
        偵查實(shí)驗(yàn)批準(zhǔn)程序初探
        我國刑事速裁程序的構(gòu)建
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        恐怖犯罪刑事訴訟程序的完善
        亚洲一区二区三区特色视频| 无码国产精品一区二区高潮| 亚洲国产精品福利片在线观看| 亚洲欧美日韩精品久久亚洲区| 国产91色在线|亚洲| 亚洲一区二区三区久久久| 国产视频在线观看一区二区三区| 国产精品综合一区久久| 嫩草伊人久久精品少妇av| 18禁黄网站禁片免费观看女女| 久久综合精品国产丝袜长腿| 成人免费va视频| 国产精品久久久一本精品| 人妻熟女中文字幕av| 欧美疯狂性受xxxxx喷水| 亚洲精品一品区二品区三品区| 国产精品成人av在线观看| 91久久久久无码精品露脸| 亚洲中文字幕日产喷水| 国产激情一区二区三区不卡av | 亚洲日韩在线中文字幕综合| 欧美 国产 日产 韩国 在线| 亚洲欧美变态另类综合| 蜜桃在线观看免费高清| 蜜桃一区二区三区视频网址| 久久伊人精品一区二区三区| 性欧美videofree高清精品| 日日噜噜噜夜夜爽爽狠狠| 国产一区二区激情对白在线| 久久无人码人妻一区二区三区| 国产视频自拍一区在线观看| 国产乡下三级全黄三级| xxxx国产视频| 亚洲一区精品中文字幕| 亚洲男人的天堂av一区| 中国杭州少妇xxxx做受| 色偷偷偷久久伊人大杳蕉 | 国产七十六+老熟妇| 精品日韩欧美一区二区在线播放| 日韩偷拍一区二区三区视频| 亚洲国产精品一区亚洲国产|