点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好,IdM专家,
我想构建一个可以通过UI任务(报告表单)触发的报告功能。 UI任务启动一个过程(类型:表单操作过程),该过程使用带有SQL查询的脚本从数据库中获取数据。 我正在使用内置的uSelect查询数据库。
SQL查询非常复杂,但是当我在MSSQL Server Management Studio中启动它时,它会在5秒钟内执行。 但是,当该过程执行查询时,需要花费一定的时间才能完成(3000-5000秒)。 我已使用不同的视图重写了查询,但没有帮助。
感谢您的帮助! 问候
佐尔坦
SAP IDM:8.0.4
这是查询的最新版本:
选择li.mcThisMSKEYVALUE作为用户名,en2.sval作为姓氏,en3.sval作为姓氏,en4.sval作为"显示名称",li.mcOtherMSKEYVALUE作为"角色ID",en5.sval作为"角色名称",en .mcMSKEYVALUE作为'管理单位',convert(varchar(20),li.mcValidFrom,20)作为'Valid from',convert(varchar(20),li.mcValidTo,20)作为'Valid to',convert(varchar( 20),mcAddedTime,20)作为``请求日期'',en6.sval作为发起方,REPLACE(REPLACE(REPLACE(li.mcReason,CHAR(13),''),CHAR(10),''),';';' ,':')作为'请求原因',convert(varchar(20),en7.mcDate,20)作为'批准日期',en7.mcResponsibleDisplayName作为批准者,REPLACE(REPLACE(REPLACE(en7.mcReason,CHAR(13) ),''),CHAR(10),''),';',':')作为'批准原因',convert(varchar(20),li.mcModifyTime,20)作为'分配日期',en8。 sval为'Inactive','lb'FROM [mxmc_db]。[dbo]。[idmv_link_ext] li WITH(NOLOCK)左连接[mxmc_db]。[dbo]。[idmv_entry_simple] en on li.mcContextMSKEY = en.mcMSKEY左连接 li.mcThisMSKEY = en2.M上的[mxmc_db]。[dbo]。[idmv_vna] en2 SKEY和en2.AttrName ='MX_FIRSTNAME'左连接[mxmc_db]。[dbo]。[idmv_vna] en3 on li.mcThisMSKEY = en3.MSKEY和en3.AttrName ='MX_LASTNAME'左连接[mxmc_db]。[dbo]。 idmv_vna]上li.mcThisMSKEY = en4.MSKEY和en4.AttrName ='DISPLAYNAME'上的en4加入[mxmc_db]。[dbo]。[idmv_vna] li.mcOtherMSKEY = en5.MSKEY和en5.AttrName ='DISPLAYNAME'上的en5 在li.mcAssigner = en6.MSKEY和en6.AttrName ='DISPLAYNAME'上加入[mxmc_db]。[dbo]。[idmv_vna] en6。在li.mcUniqueID = en7上加入[mxmc_db]。[dbo]。[idmv_historic_approvals] en7。 mcLinkId和en7.mcOperationText ='已批准'左连接[mxmc_db]。[dbo]。[idmv_vna] en8 on li.mcThisMSKEY = en8.MSKEY和en8.AttrName ='MX_DISABLED'其中li.mcAttrName ='MXREF_MX_ROLE'和li。 mcContextMSKEY不为null,并且(li.mcLinkState = 0和li.mcExecState = 1)或(li.mcLinkState = 1和li.mcExecState = 512和li.mcValidFrom> GETDATE()))由li.mcThisMSKEYVALUE,li排序。 mcOtherMSKEYVALUE
您好,佐尔坦,
在SQL Studio中执行查询时,它仅获取一定数量的行。 当您使用Java执行查询时(uSelect就是这种情况),它查询所有数据并将所有内容读取到分配给相应Java进程的内存中,这就是为什么它花费更长的时间的原因。
我基本上要告诉您的是,您需要降低查询的复杂度或对其进行优化,以便获得更好的运行时间。
也许可以帮助您使用逻辑分组法
在这里解释:
此处致谢
诺曼
嗨,诺曼,
感谢您的回答。
我的印象是SQL Studio会提取所有数据,因为5秒钟后,我可以将结果导出到CSV文件和所有大约的文件。 导出了17.000行,大约5 MB的数据。 因此,我无法解释为什么从IdM流程花费这么长时间。
您提到分配给java进程的内存。 可以调整它以便为它分配更多的内存吗?
谢谢
Zoltan
嗨Zoltan,
您可以在调度程序设置中添加Java VM参数。 分配新内存需要花费大量CPU时间,因此调整VM参数很有意义,但是除非您仅将专用调度程序用于此类繁重的操作,否则这些参数会影响所有Idm进程。 无论如何,我不会对此抱有太大期望,但我很好奇它是否会带来很大的改变。
致谢
诺曼
嗨佐尔坦
请签入调度程序的属性->选项卡策略-> Java选项
最好的问候
诺曼(Norman)
嗨Zoltan,
您可以尝试将任务分为两个步骤。
1将所有内容都选择到临时表中。
2转换为ASCII文件-将表的内容导出到CSV文件中。/或通过其他任何方式继续处理数据
根据您的描述,步骤1只需几秒钟即可完成。 根据数据量和服务器性能,第2步可能需要1-2分钟才能完成17000条记录的下载。
欢呼
沉阳
嗨,佐尔坦,
我了解问题出在uSelect。 这就是为什么我建议绕过此功能的原因。
Step1只是一个SQL更新操作,您可以执行以下操作
在表XYZ中选择COL1,COL2,COL3。 由于这是一个SQL更新,它直接在数据库中运行而没有输出,因此它应该是有效的。 然后在步骤2中,将表转储到文本文件中。
欢呼
沉阳
一周热门 更多>