在DI API 9.2(SQL)上性能插入/更新缓慢

2020-09-22 05:39发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)尊敬的专家, ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我们有一个附加组件,即批处理过程会在SAP Business One中创建销售订单,DO,AR发票。我监视了每个模块的插入情况,平均每次SAP Business One中插入的文档只有100个文档/1分钟。

每天我们需要生成10.000 AR发票,这意味着现在,它可以运行100分钟/大约2个小时。 预计的文档将每年增加两次。..

有什么事情可以改善性能? 这正常吗? 插入DI SAP时通常会使用什么基准?

我们在具有良好规格,内存32 gb,处理器8核的服务器上运行此

注意:这是用于SBO SQL版本,请不要建议使用服务层HANA:)

4条回答
bbpeas
2020-09-22 06:22

亨德拉,

请遵循以下一般最佳做法

  1. 使用DI API的64位而不是32位。
  2. 如果AR发票不必按原始顺序排列,则打开多个并行运行的附加进程以提高系统吞吐量。 您将需要测试多少种是最佳品种。 并行创建AR的过程越多,死锁的可能性就越大。 如果发生死锁,您可能需要实现重试机制,请参阅此说明 1444532-SDK死锁处理没有全球交易。 请不要使用全局事务,在这种情况下这是不必要的,这会降低性能并增加死锁的可能性。
  3. 从xml文件加载AR发票对象列表,然后将其一个个添加。

Company.GetBusinessOjectFromXml()
这里是从XML文件导入BP列表供您参考的示例,您可以轻松地用Documents对象替换该列表。
AR列表的输入结构合而为一 xml文件:


<!-1st AR文档->

13
2



...


....

...

<!-2nd AR文档:重复BO结构->


....

....

 Sub ImportBPfromXmlFile(ByVal filePath作为字符串)
         尝试
             如果FileIO.FileSystem.FileExists(filePath)= False,则
                 '文件不存在
                 MsgBoxWrapper(String.Format("文件不存在。{0}",filePath))
                 返回
             万一
             昏暗计数为整数= oCompany.GetXMLelementCount(filePath)-1
             Dim oBP as SAPbobsCOM.BusinessPartners =没什么
             昏暗的OBP2作为SAPbobsCOM.BusinessPartners = _
                 oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners)
             对于i作为整数= 0进行计数
                 如果oCompany.GetXMLobjectType(filePath,i)= SAPbobsCOM.BoObjectTypes.oBusinessPartners,则
                     '这是一个BP对象,然后保存它。
                     oBP = oCompany.GetBusinessObjectFromXML(filePath,i)
                     '检查BP是否存在
                     如果oBP2.GetByKey(oBP.CardCode)然后
                         '已经存在。更新
                         '如果xml文件包含多个BP,则调用update,
                         '否则,如果xml中只有一个BP,最好调用updateFromXml()
                         lRetCode = oBP.Update
                     其他
                         '这是一个新的BP,只需添加它
                         lRetCode = oBP.Add
                     万一
                     DIErrorHandler(String.Format("正在导入BP {0}",oBP.CardCode))
                 万一
             下一个
         异常捕获
             MsgBoxWrapper(例如消息)
         结束尝试
     结束

Yatsea的致谢

一周热门 更多>