uSelect查询需要很长时间

2020-09-18 19:49发布

         点击此处--->   EasySAP.com群内免费提供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

         点击此处--->   EasySAP.com群内免费提供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

付费偷看设置
发送
6条回答
灬番茄
1楼-- · 2020-09-18 20:21

您好,佐尔坦,

在SQL Studio中执行查询时,它仅获取一定数量的行。 当您使用Java执行查询时(uSelect就是这种情况),它查询所有数据并将所有内容读取到分配给相应Java进程的内存中,这就是为什么它花费更长的时间的原因。

我基本上要告诉您的是,您需要降低查询的复杂度或对其进行优化,以便获得更好的运行时间。

也许可以帮助您使用逻辑分组法

选择mskey,
 max(当AttrName ='MSKEYVALUE'然后是Value结束时的情况)mskeyvalue,
 max(当AttrName ='DISPLAYNAME'然后值结束时的情况)DisplayName,
 max(当AttrName ='MX_ENTRYTYPE'然后值结束时的情况)EntryType 
来自idmv_value_basic 
其中attrname位于('MSKEYVALUE','DISPLAYNAME','MX_ENTRYTYPE')
 groupby mskey 

在这里解释:

此处

致谢

诺曼

2楼-- · 2020-09-18 20:23

嗨,诺曼,

感谢您的回答。

我的印象是SQL Studio会提取所有数据,因为5秒钟后,我可以将结果导出到CSV文件和所有大约的文件。 导出了17.000行,大约5 MB的数据。 因此,我无法解释为什么从IdM流程花费这么长时间。

您提到分配给java进程的内存。 可以调整它以便为它分配更多的内存吗?

谢谢

Zoltan

SAP小菜
3楼-- · 2020-09-18 20:32

嗨Zoltan,

您可以在调度程序设置中添加Java VM参数。 分配新内存需要花费大量CPU时间,因此调整VM参数很有意义,但是除非您仅将专用调度程序用于此类繁重的操作,否则这些参数会影响所有Idm进程。 无论如何,我不会对此抱有太大期望,但我很好奇它是否会带来很大的改变。

致谢

诺曼

Bunny_CDM
4楼-- · 2020-09-18 20:31

嗨佐尔坦

请签入调度程序的属性->选项卡策略-> Java选项

最好的问候

诺曼(Norman)

奄奄一息的小鱼
5楼-- · 2020-09-18 20:20

嗨Zoltan,

您可以尝试将任务分为两个步骤。

1将所有内容都选择到临时表中。

2转换为ASCII文件-将表的内容导出到CSV文件中。/或通过其他任何方式继续处理数据

根据您的描述,步骤1只需几秒钟即可完成。 根据数据量和服务器性能,第2步可能需要1-2分钟才能完成17000条记录的下载。

欢呼

沉阳

悠然的二货
6楼-- · 2020-09-18 20:17

嗨,佐尔坦,

我了解问题出在uSelect。 这就是为什么我建议绕过此功能的原因。

Step1只是一个SQL更新操作,您可以执行以下操作

在表XYZ中选择COL1,COL2,COL3。 由于这是一个SQL更新,它直接在数据库中运行而没有输出,因此它应该是有效的。 然后在步骤2中,将表转储到文本文件中。

欢呼

沉阳

一周热门 更多>