ABAP 報表程式OpenSQL效能調優

2021-08-30 09:37:23 字數 1223 閱讀 3397

臨上線了,需求還在改,報表也得改,需求滿足了,程式效能又不滿足了,淨折騰啊. 可客戶是付錢的上帝,所以程式要調優要改進,不然,要錢不給!

sap 系統是經典的三層架構,分為db, 應用伺服器,展示層三層.abap程式執行在應用伺服器層,訪問的資料儲存在db,而我們要做的就是把資料從db中取出來,然後送到展示層以展現給使用者. 而這裡db是作為集中式資源存在的,難以水平擴充套件,而應用伺服器則可以水平進行擴充套件以滿足系統效能需求.所以,調優要盡可能地優先在應用伺服器做,其次在 db層.而報表程式中,往往對資料庫的訪問會占用大部分的程式執行時間,而且在sap系統中,業務資料表資料量都很大, 在實現業務邏輯時,要考慮到opensql的效率問題.

1. 避免table full scan, 盡可能的使用表的索引.

在使用索引時,索引的字段要匹配其順序,並且索引的字段要盡可能靠前. 可以使用st05檢視程式使用索引的情況.

另外,有一些表並沒有直接的索引字段,譬如sd中的表如vbrk等,可以通過索引表vbrkpa等預先取得主鍵再去訪問vbrk.

有意思的是在 的ddic透明表在oracle中並沒有真正的主鍵,而是將ddic的主鍵字段作為primary index使用的.

2.   對於for all entries 的使用

它一般是根據內錶中記錄的數量分割成多條sql語句來執行,所以當內表比較大時,使用for all entries對程式執行時間有影響,使用時多考慮.

另外,連線的內錶中不要有重複紀錄,這樣會重複對資料庫的訪問.

3.    直接將資料快取在內表

譬如在訪問如sales office等資料量不大的主資料表時,可以將記錄預先讀出.

4.    使用 database hints

這是殺招,謹慎使用.

它是一些基於特定資料庫的優化技巧,使用這些技巧可以影響資料庫優化器對錶使用的訪問策略. 注意,abap語法並不能檢查它的對錯,一定要保證hints的正確性, 另外它只能用於透明表.

示例:%_hints oracle 'leading(t_01) use_nl (t_00 t_02)'.

使用t_01作為首要訪問的表,並將t_00作為內部表聯接.

note 129385 - database hints in open sql

note 130480 - database hints in open sql for oracle

ABAP 報表的事件

一,首先介紹一下 abap 的程式的型別 program type 程式型別 introductory statement 型別描述 1 report 報表 m program 螢幕程式 f function pool 函式組 k class pool 類組 j class pool 介面組 t t...

ABAP報表的事件

一,首先介紹一下abap的程式的型別 program type 程式型別 introductory statement 型別描述 1 report 報表 m program 螢幕程式 f function pool 函式組 k class pool 類組 j class pool 介面組 t typ...

ABAP 報表開發例項

在這裡示範乙個例項,講講abap開發報表的簡單過程。程式的正確與 否我們不與討論,我們只關心這個程式的編寫過程。首先,在任何程式的開始階段,我們都要確定將會用到的表。我們所講的這個程式 是查詢採購訂單是否完成的。將會用到以下三個表 ekko,ekpo,eket。程式的開頭為 report test....