天天看點

SAP CRM One Order關于索引表CRMD_ORDER_INDEX的一些性能問題的分析

From: Wang, Jerry

Sent: Wednesday, March 19, 2014 11:54 AM

Subject: FW: custom development in IC search for Customer

下面是SAP CRM One Order搜尋進入DB層處理的入口。

如果我隻按照Service order的creation date搜,在背景的标準實作還是和我們own的product search類似,最後拼open sql。

SAP CRM One Order關于索引表CRMD_ORDER_INDEX的一些性能問題的分析
SAP CRM One Order關于索引表CRMD_ORDER_INDEX的一些性能問題的分析

拿到guid之後,再從index table裡取其他字段:

SAP CRM One Order關于索引表CRMD_ORDER_INDEX的一些性能問題的分析

之是以出現99.7%時間花在DB access on CRMD_ORDER_INDEX上,在于下圖第40行的FOR ALL ENTIRES。後面跟的internal table it_guids_for_update裡面entry越多,性能越差。

SAP CRM One Order關于索引表CRMD_ORDER_INDEX的一些性能問題的分析

6259 records during Mar 9th 5-7 o’clock, 1244 during Mar 8th 21-23 o’clock

例如客戶在周日上午5點到7點就有6259個新訂單生成,那麼一個月之内的訂單數量是個非常龐大的數字,是以FOR ALL ENTRIES性能非常差。

但是第一個版本就用的For all entries,可能當初寫代碼的時候沒有考慮潛在的性能問題。IBASE和PRODUCT的實作裡都用的OPEN CURSOR +PACKAGE SIZE。

即使底層DB是HANA, 在資料庫執行搜尋時,FOR ALL ENTRIES IN it_table一樣會把it_table裡的是以entry展開成

IN( A, B, C, D, E … )的execution plan然後執行,效率不高。

SAP CRM One Order關于索引表CRMD_ORDER_INDEX的一些性能問題的分析