且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SAP CRM One Order关于索引表CRMD_ORDER_INDEX的一些性能问题的分析

更新时间:2022-08-21 18:54:24

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的一些性能问题的分析