国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

提高SAP系統(tǒng)ABAP程序性能的方法研究

2013-10-08 03:04于慧廖華元
中國科技信息 2013年23期
關(guān)鍵詞:報表語句程序

于慧 廖華元

株洲南車時代電氣股份有限公司信息中心應(yīng)用開發(fā)部,湖南 株洲 412001

近年來,隨著信息技術(shù)的迅猛發(fā)展,各大企業(yè)為順應(yīng)信息時代的步伐,不斷尋找數(shù)據(jù)流程及流程管理的解決方案,而SAP系統(tǒng)作為目前世界排名第一的ERP軟件已被世界范圍的眾多企業(yè)接受并推廣使用。SAP平臺為用戶提供了強大的業(yè)務(wù)管理解決方案,囊括了幾乎企業(yè)所需要的全部業(yè)務(wù)功能。但由于各企業(yè)業(yè)務(wù)背景不一致,需要使用SAP的專用開發(fā)語言ABAP在已有SAP系統(tǒng)基礎(chǔ)上進行二次開發(fā),用來解決用戶定制化需求。

1 SAP系統(tǒng)二次開發(fā)程序存在的問題

SAP系統(tǒng)為企業(yè)提供統(tǒng)一解決方案和事務(wù)處理系統(tǒng),支撐企業(yè)的日常運營,并促使企業(yè)流程規(guī)范化。同時,也使得企業(yè)管理系統(tǒng)的事務(wù)數(shù)據(jù)呈海量增長,系統(tǒng)壓力成倍增加,日常業(yè)務(wù)事務(wù)運行所需時間越來越長,難以滿足企業(yè)快速響應(yīng)的需求。為了順應(yīng)企業(yè)發(fā)展需要,必須提高SAP系統(tǒng)性能、降低事務(wù)響應(yīng)時間。提高系統(tǒng)性能的方法中提升硬件環(huán)境是行之有效的方法之一,但提升硬件設(shè)施成本高,不可僅依賴這一種方式來解決系統(tǒng)性能問題。可行的方法是提高SAP系統(tǒng)程序的性能,SAP本身標準程序經(jīng)過幾十年的驗證和完善,響應(yīng)性能相對較高,且標準程序邏輯復(fù)雜,各模塊相互關(guān)聯(lián),改造標準程序風險較大;而由用戶或?qū)嵤┥套孕虚_發(fā)的程序,會由于各種原因,導致程序本身會存在性能問題,分析ABAP二次開發(fā)程序性能不高的原因主要有以下三點:

1)開發(fā)工程師對ABAP語言了解不全面,還未能熟練掌握開發(fā)技巧,未采用高效率的語法進行程序開發(fā);

2)系統(tǒng)工程師對系統(tǒng)業(yè)務(wù)和邏輯不了解,造成數(shù)據(jù)關(guān)聯(lián)的邏輯不準確;

3)系統(tǒng)上線初期,因為數(shù)據(jù)庫中數(shù)據(jù)較少,未能發(fā)現(xiàn)程序運行中存在的瓶頸。

由此可知,隨著開發(fā)工程師、系統(tǒng)工程師對ABAP語言和SAP系統(tǒng)的逐步學習和掌握,二次開發(fā)的程序有著很大的優(yōu)化空間。因此,通過對二次開發(fā)的程序進行性能優(yōu)化是非常有必要的[1]。

下面分別從程序性能問題分析、優(yōu)化方法和應(yīng)用經(jīng)驗這三個方面加以論述。

2 程序性能問題分析

2.1 快速識別低性能的程序

除了用戶或系統(tǒng)工程師經(jīng)過對開發(fā)程序的實際使用,發(fā)現(xiàn)程序性能問題外,一般還可以通過以下兩種方法發(fā)現(xiàn)可優(yōu)化的程序。

2.1.1 使用工作負載監(jiān)控器

事務(wù)代碼ST03,即工作負載監(jiān)控器。通過該事務(wù)可按年、星期、月、日查看SAP系統(tǒng)中用戶運行的所有事務(wù)清單,包括交易次數(shù)、總響應(yīng)時間、平均相應(yīng)時間、等待時間、數(shù)據(jù)庫時間、處理時間等等。一般按月從該事務(wù)中查找平均響應(yīng)時間較長、運行次數(shù)較多的事務(wù),對排名相對靠前的程序進行優(yōu)化。

2.1.2 查詢錯誤日志

事務(wù)代碼ST22,即ABAP錯誤日志查詢。通過該事務(wù)可查看系統(tǒng)一段時間內(nèi)所有的異常報錯日志,其中包括程序超時。SAP正式環(huán)境設(shè)置前臺程序運行時長為20min,程序運行超過這個時間,會立即停止運行,并顯示Time Out的異常。通過ST22,匯總統(tǒng)計超時運行的程序次數(shù),并跟蹤分析幾個月,選擇經(jīng)常出現(xiàn)超時問題的程序進行優(yōu)化。

2.2 程序性能分析方法

篩選出響應(yīng)時間較長、經(jīng)常運行超時的程序之后,就得找出造成程序運行瓶頸的原因,需確定是讀某個數(shù)據(jù)庫表慢,還是循環(huán)處理數(shù)據(jù)慢等等??赏ㄟ^如下兩個SAP標準事務(wù)代碼來達到“對癥下藥”的目的。

2.2.1 跟蹤事務(wù)的指定操作

事務(wù)跟蹤器ST05,通過這個事務(wù)可跟蹤事務(wù)的指定操作,還可選擇跟蹤模式:SQL跟蹤、隊列跟蹤、遠程函數(shù)調(diào)用RFC跟蹤和緩存區(qū)跟蹤。一般選擇SQL跟蹤。該事務(wù)可顯示每一個讀表語句所花費的時間,從而分析每條語句。

2.2.2 ABAP運行時長分析

使用該工具主要用于某個事務(wù)或程序后臺ABAP 的運行時分析。與ST05不同的是,SE30不光可監(jiān)控到讀表所花費的時間,還能記錄其它數(shù)據(jù)處理語句或整個子程序花費的時間。可根據(jù)需要設(shè)定跟蹤的數(shù)據(jù)范圍和分析結(jié)果的粒度,采用漸進式的方法分析跟蹤結(jié)果[2]。

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

優(yōu)化開發(fā)程序性能的方法主要有三點:一是優(yōu)化讀取數(shù)據(jù)庫表的語句,低效率的SQL語句不僅耗時,還會占用數(shù)據(jù)庫大量資源,造成其它語句排隊等待資源的現(xiàn)象;二是改進ABAP程序設(shè)計的算法,算法的優(yōu)劣也同樣決定著報表程序的運行時間,嵌套循環(huán)、反復(fù)內(nèi)表賦值等,往往也是導致程序運行超時的罪魁禍首;三是改善用戶使用SAP系統(tǒng)功能的習慣,引導與培養(yǎng)用戶掌握正確、良好的SAP查詢方法也是很重要的,輸入日期、組織機構(gòu)等查詢范圍,就能大幅度減小取數(shù)范圍。因此程序性能優(yōu)化方法的研究就需要從這三個方面開始。

3.1 讀取數(shù)據(jù)庫表相關(guān)的優(yōu)化方法

3.1.1 使用數(shù)據(jù)庫索引

數(shù)據(jù)庫表的一級索引為關(guān)鍵字段,比如年度、憑證編號、行號等等。限定和關(guān)鍵字段一致的選擇條件讀取速度是最快的,但往往僅個位數(shù)的關(guān)鍵字段很難滿足多維報表的查詢需求。因此可根據(jù)查詢數(shù)據(jù)的經(jīng)驗,建立二級索引。SAP允許用戶對標準數(shù)據(jù)表創(chuàng)建索引。但使用時,要注意where條件后的字段順需和索引完全保持一致,可缺少其中的某個字段,但從上至下的順序是不能打亂的。如某個數(shù)據(jù)表的二級索引字段為工廠、物料、移動類型、庫存地點,在使用的過程中定義為工廠、庫存地點、物料、移動類型,則是不可以的。

另一種情況,若大多數(shù)選擇條件都存在索引,而個別條件不存在,則建議在讀取數(shù)據(jù)表的SQL語句中把個別條件去除,取數(shù)完成之后再通過邏輯語句進行數(shù)據(jù)篩選。

值得注意的是,不是任何時候都通過建立索引的方式來提高讀取速度,因為索引的建立需要占用數(shù)據(jù)庫空間,只應(yīng)對經(jīng)常使用到的查詢條件建立[3]。

3.1.2 降低數(shù)據(jù)庫負載

要提高讀取數(shù)據(jù)的性能,就需要減少從數(shù)據(jù)庫傳輸?shù)綉?yīng)用服務(wù)器的數(shù)據(jù)量、減少讀取數(shù)據(jù)庫表的次數(shù),或者將增加系統(tǒng)負載的操作轉(zhuǎn)移到應(yīng)用服務(wù)器上。

有些程序員為了方便、省事,將無關(guān)字段定義在程序內(nèi)表中,取數(shù)語句不指定字段名稱,直接用“SELECT*”代替。當程序僅從一個包含兩百多個字段的表中讀取幾個字段時,“SELECT*”帶來了多余的數(shù)據(jù)量。當然,這是一個比較極端的例子,但資源的占用往往是無形的。取數(shù)時,跟選擇條件有關(guān)、能限定數(shù)據(jù)范圍的表要先讀取,盡量減少從數(shù)據(jù)庫傳輸?shù)綉?yīng)用服務(wù)器的數(shù)據(jù)量。

在設(shè)計程序邏輯的時候,系統(tǒng)工程師可能未考慮到性能問題,只是將取數(shù)先后順序、數(shù)據(jù)處理方式簡單的羅列。但在開發(fā)工程師進行系統(tǒng)開發(fā)時,就得注意盡量將對同一張數(shù)據(jù)表的取數(shù)合并成一次,更應(yīng)避免在LOOP循環(huán)語句中,使用select single每次讀取一條數(shù)據(jù)的方式。必須減少讀取數(shù)據(jù)庫的次數(shù),從而緩解系統(tǒng)壓力。

另外,SQL語句是支持GROUP BY、MAX等排序、比較功能的,但這種排序不應(yīng)由數(shù)據(jù)庫來執(zhí)行,而是應(yīng)由程序命令在應(yīng)用服務(wù)器上執(zhí)行。因為一般情況下,SAP正式環(huán)境應(yīng)用服務(wù)器數(shù)量多于數(shù)據(jù)庫服務(wù)器,應(yīng)用服務(wù)器的資源比數(shù)據(jù)庫資源多,所以在應(yīng)用服務(wù)器上執(zhí)行操作,可以減少對數(shù)據(jù)庫服務(wù)器的資源占用,從而提高系統(tǒng)整體性能。

3.1.3 取數(shù)語句使用注意事項

當數(shù)據(jù)來源為多個相關(guān)表時,可以使用Join 關(guān)聯(lián)語句將幾個表按關(guān)鍵字關(guān)聯(lián)起來。不過這種關(guān)聯(lián)表的個數(shù)最多不能超多三張,否則系統(tǒng)不能選出最優(yōu)的索引取數(shù)方法,反而降低了速度。

有一種語句“FOR ALL EINTRIES IN”,用來限定取數(shù)范圍,將取數(shù)與已有相關(guān)內(nèi)表數(shù)據(jù)關(guān)聯(lián)起來,是程序中經(jīng)常使用到的語法。但使用該語句有一個先決條件,及作為驅(qū)動表的內(nèi)表不能為空,否則“FOR ALL EINTRIES IN”將造成整個數(shù)據(jù)表數(shù)據(jù)的讀取。對于系統(tǒng)增量表來說,缺乏驅(qū)動表為空的檢查,必會帶來超時的后果。此外,驅(qū)動表最好不包含重復(fù)的條目,否則會造成相應(yīng)的數(shù)據(jù)從數(shù)據(jù)庫中獲取對應(yīng)條目的次數(shù),可通過排序并刪除重復(fù)行來避免這種情況。

通過使用以上三種優(yōu)化方法對公司財務(wù)報表“現(xiàn)金流量表”進行優(yōu)化,效果十分明顯。通過事務(wù)代碼SE30對該程序運行時長進行分析,為了避免數(shù)據(jù)緩存對第二次取數(shù)的速度影響,故先運行優(yōu)化后的程序,其兩者在測試環(huán)境運行時間對比如下:

如圖一、圖二所示,程序優(yōu)化后總體運行時長為519,622毫秒,而優(yōu)化前的程序運行時長為2,050,436毫秒,速度提升了2.9倍;而數(shù)據(jù)庫耗用時間方面,優(yōu)化后僅需118,307毫秒,而優(yōu)化前是1705,921毫秒,速度提升了14.4倍。由此可看出優(yōu)化效果十分明顯。

圖1 程序優(yōu)化后運行時長

圖2 原程序運行時長

3.2 ABAP程序設(shè)計的語法優(yōu)化

程序優(yōu)化,需要在程序設(shè)計時,除了選擇最優(yōu)數(shù)據(jù)結(jié)構(gòu),還需要有最優(yōu)執(zhí)行語句、設(shè)計最優(yōu)執(zhí)行流程,從而達到程序執(zhí)行速度快、占用系統(tǒng)資源少的目的。以下幾種方法是在日常開發(fā)工作中常用到的語法優(yōu)化方法。

3.2.1 二分法查找

當一個內(nèi)表數(shù)據(jù)量大時,使用二分法查找的優(yōu)化效果特別明顯,事半功倍。因為利用二分法查找一個元素的最大比較次數(shù)不超過[log n]+1,這里n 為數(shù)列元素的個數(shù)。相比之下用順序查找的最大比較次數(shù)為n-1,由此可知使用二分法后程序性能大為提高。因此在read內(nèi)表時,往往都會加上二分法的標志性字段“Binary search”。但在使用二分法之前,一定要根據(jù)關(guān)聯(lián)條件對讀取內(nèi)表進行排序,否則就事倍功半了。

3.2.2 避免嵌套循環(huán)

當內(nèi)表數(shù)據(jù)量比較大時,應(yīng)減少使用循環(huán)嵌套的次數(shù),并不應(yīng)在循環(huán)中定義變量。一般的嵌套循環(huán)可以采用一層循環(huán)和二分法讀取內(nèi)表來代替,若碰到有多行需計算匯總數(shù)量或金額等,則可先在循環(huán)外使用Collect或At new/At end等方式獲取所需結(jié)果,再結(jié)合read內(nèi)表方法讀取。

有些程序邏輯過于復(fù)雜,嵌套循環(huán)往往能節(jié)省很多的代碼段,達到最終的顯示效果,但這種方式雖省力但不省時,因此需要盡量避免。

3.2.3 及時釋放表空間

多使用內(nèi)表處理數(shù)據(jù)能幫助減少數(shù)據(jù)庫壓力,但是使用之后無用的內(nèi)表數(shù)據(jù)應(yīng)及時清空,釋放資源。且內(nèi)表字段不宜定義的過多,應(yīng)按需分配,減小占用空間。

在SAP中有Clear itab、Clear itab[]、Refresh itab和Free itab四種清空內(nèi)表的方法,但四種方法的實現(xiàn)效果不相同。Clear itab僅清空表頭,對內(nèi)表數(shù)據(jù)存儲空間不影響;Clear itab[]和Refresh itab功能一致,即清空內(nèi)表數(shù)據(jù)存儲空間,以上三種方法均保留內(nèi)存區(qū), 而僅有Free itab即可清空內(nèi)存表數(shù)據(jù)存儲空間,并釋放內(nèi)存區(qū)。因此確定使用完畢的內(nèi)表,則可使用Free語法釋放空間。

3.2.4 了解業(yè)務(wù)場景和流程

開發(fā)人員除了掌握ABAP程序開發(fā)語言之外,還需對公司業(yè)務(wù)場景和流程有一定的了解,知道系統(tǒng)數(shù)據(jù)表中的數(shù)據(jù)是從哪一步操作得來的。雖說企業(yè)可能有專門的ERP業(yè)務(wù)分析人員,但他們對業(yè)務(wù)和系統(tǒng)后臺表之間的關(guān)系不一定很清楚,給出的設(shè)計方案中取數(shù)可能會走彎路,比如采購訂單物料憑證信息在MSEG、EKBE中都存在,但MSEG包括所有的物料移動憑證信息,EKBE則只包含與采購訂單相關(guān)的憑證信息,因此讀取EKBE時會比MSEG快很多[4]。

3.2.5 設(shè)置后臺運行功能

當程序取數(shù)邏輯、語法均優(yōu)化過后,發(fā)現(xiàn)程序仍然會因為數(shù)據(jù)量大、運算邏輯復(fù)雜運行超時,就需要為該程序開發(fā)后臺運行功能。系統(tǒng)標準功能可直接后臺運行指定程序,但該方法顯示的報表結(jié)果不方便查看和導出,因此需通過運行自定義后臺運行功能,最終得到與前臺運行一致的展現(xiàn)結(jié)果。

表1 報表優(yōu)化效果舉例

開發(fā)后臺運行功能時,可根據(jù)報表性質(zhì),按月或按天晚上自動運行后臺作業(yè),將上月或前一天的報表結(jié)果計算好保存到指定自建表中。用戶前臺運行時,程序可按照查詢條件,從后臺自建表中取出已有數(shù)據(jù),與本月或當天新增數(shù)據(jù)合并后顯示。這樣即可滿足不同用戶的需要,又可減少后臺運行的次數(shù),并大大縮小前臺運行的時間和所需資源。

3.3 引導與培養(yǎng)用戶正確的使用SAP查詢

企業(yè)組織架構(gòu)復(fù)雜,各分子公司的業(yè)務(wù)流程和要求有很多差異,因此可能開發(fā)了大量業(yè)務(wù)日常需要的事務(wù)功能,包括查詢報表、單據(jù)打印、數(shù)據(jù)導入等等,這其中查詢報表占得數(shù)量是最多的;查詢報表又分為明細查詢報表、年度或月度匯總報表;并且系統(tǒng)積累了大量的業(yè)務(wù)數(shù)據(jù),若每張報表都不加任何查詢條件的窮查,那將造成嚴重的服務(wù)器負載,用戶最終也得不到想要的數(shù)據(jù)結(jié)果。因此作為SAP系統(tǒng)程序的開發(fā)者,在程序開發(fā)時就得通過以下幾種方式來引導與培養(yǎng)用戶掌握正確、良好的SAP查詢方法[5]。

3.3.1 限定報表關(guān)鍵查詢條件必填

設(shè)置查詢報表的選擇條件,首先要了解用戶的需求和操作習慣,與用戶達成一致之后,則將關(guān)鍵查詢條件設(shè)置成為必輸字段,若這些字段未輸入,則會彈出相關(guān)消息提醒用戶。關(guān)鍵字段一般為日期范圍、訂單類型、工廠、采購組等等,用于縮小查詢數(shù)據(jù)的范圍。

3.3.2 默認查詢條件

在上一步了解了用戶查詢習慣之后,可對必填條件設(shè)置默認值。比如某張按照月度查詢的財務(wù)報表,就可默認查詢?nèi)掌趶漠斣?日到查詢當天,用戶即可臨時修改,又省去了每次都需手工輸入的麻煩。

3.3.3 引導用戶需求

企業(yè)組織架構(gòu)、業(yè)務(wù)類型隨著市場的需要,不斷地在發(fā)生變化,用戶對報表的取數(shù)邏輯和展現(xiàn)格式也在跟著變化,因此業(yè)務(wù)部門可能會向信息部門提出很多新的開發(fā)需求。這種情況下,建議信息部門系統(tǒng)工程師和開發(fā)工程師組織專家對這些需求進行評審,判斷是否可以通過對原有報表的修改來滿足新需求。在ERP實施和運維的整個階段中,應(yīng)控制新報表的開發(fā),盡量使用系統(tǒng)已開發(fā)報表或系統(tǒng)標準功能,因為程序量多,維護工作也相應(yīng)增多,很難保證每個程序的最優(yōu)邏輯和取數(shù)語法。

4 優(yōu)化方法的實踐情況

本人所在單位從兩年前開始開展優(yōu)化工作,在數(shù)據(jù)庫以平均每天1G增長速度的應(yīng)用情況下,SAP系統(tǒng)對話響應(yīng)時間能基本保持穩(wěn)定。部分程序優(yōu)化效果十分明顯,受到了用戶的良好反饋。表1為部分優(yōu)化程序優(yōu)化效果舉例。

5 結(jié)論

通過實踐表明,本文介紹的SAP系統(tǒng)ABAP程序優(yōu)化方法能夠有效地提高SAP系統(tǒng)的整體性能,使系統(tǒng)可用性得到了提高,這對提高用戶滿意度起著重要的作用。

總而言之,系統(tǒng)性能優(yōu)化是一個長期且復(fù)雜的系統(tǒng)性工程,需要注重多方面的問題。開發(fā)人員需更加深入了解業(yè)務(wù)流程,并掌握系統(tǒng)數(shù)據(jù)增長趨勢,才能更有針對性的對程序邏輯進行優(yōu)化,對系統(tǒng)資源進行合理分配,為提高企業(yè)SAP系統(tǒng)應(yīng)用水平提供更有力的支持。

[1]托馬斯·施奈德. SAP性能優(yōu)化指南[M]. 北京:東方出版社,2006.

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

[3]秦靖,劉存勇. Oracle從入門到精通[M]. 北京:機械工業(yè)出版社,2011.

[4]鄒玉龍,王昕磊. ABAP程序性能優(yōu)化的研究及應(yīng)用[J]. 電腦知識與應(yīng)用,2011(8).

[5]李娜娜,李長海. ABAP編程中提高執(zhí)行效率的幾個技巧[J]. 數(shù)字技術(shù)與應(yīng)用,2010(4).

猜你喜歡
報表語句程序
重點:語句銜接
試論我國未決羈押程序的立法完善
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
鎮(zhèn)長看報表
創(chuàng)衛(wèi)暗訪程序有待改進
我喜歡
作文語句實錄
月度報表
月度報表
宁都县| 芜湖县| 康定县| 济南市| 吉安市| 柞水县| 郯城县| 益阳市| 乾安县| 宁强县| 会昌县| 上蔡县| 泸州市| 萨嘎县| 乌审旗| 连城县| 博兴县| 文成县| 岱山县| 万全县| 视频| 克拉玛依市| 高陵县| 库车县| 景洪市| 中牟县| 曲阳县| 庆城县| 惠水县| 富锦市| 陆川县| 万全县| 肥西县| 新化县| 富源县| 深州市| 高州市| 永胜县| 洪雅县| 雷州市| 奉贤区|