[错误] Select查询不遵循基本的性能优化规则

2020-09-10 06:53发布

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

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


您好,

我们最近在DBACOCKPIT中注意到,为标准程序" RFITEMAP "安排的后台作业占用了很高的CPU利用率(超过64%)。

引起该问题的SQL查询如下:

包含文件的名称: RFITEM_INC

查询:

围绕线号 537:

选择(gt_spec_fields)
从bkpf
进入wa_bkpf的相应字段
gt_pos_posted
中的所有条目,其中bukrs = gt_pos_posted-bukrs
AND belnr = gt_pos_posted-belnr
gjahr = gt_pos_posted-gjahr。

在进一步分析中,我们发现这是一个性能错误,因为此查询未遵循针对所有条目编写选择查询的基本最佳实践。

1)在用于所有条目之前,不会删除重复的数据

2)在对所有条目使用数据之前未对数据进行排序

以下是我们在DBACOCKPIT中注意到的数据(重复且未排序):

1。 在Where子句

中传递的重复数据

@ P80 nvarchar(10)N'0100009323'
@ P81 nvarchar(4)N'2018'
@ P82 nvarchar(4)N'8750'
@ P83 nvarchar(10)N' 0100009323'
@ P84 nvarchar(4)N'2018'<@> @ P85 nvarchar(4)N'8750'
@ P86 nvarchar(10)N'0100009323'
@ P87 nvarchar(4) N'2018'
@ P88 nvarchar(4)N'8750'

2。 在where子句中传递未排序的数据

@ P39 nvarchar(4)N' 2018 '
@ P40 nvarchar(4)N'8370'
@ P41 nvarchar(10)N'4600000023'
@ P42 nvarchar(4)N' 2019 '
@ P43 nvarchar(4)N'8370'
@ P44 nvarchar(10)N'5900000016'
@ P45 nvarchar(4 )N' 2018 '

此修复程序没有可用的注释。 请解决此性能问题,并告诉我们!

感谢与问候,
拉曼德普·考尔

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

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


您好,

我们最近在DBACOCKPIT中注意到,为标准程序" RFITEMAP "安排的后台作业占用了很高的CPU利用率(超过64%)。

引起该问题的SQL查询如下:

包含文件的名称: RFITEM_INC

查询:

围绕线号 537:

选择(gt_spec_fields)
从bkpf
进入wa_bkpf的相应字段
gt_pos_posted
中的所有条目,其中bukrs = gt_pos_posted-bukrs
AND belnr = gt_pos_posted-belnr
gjahr = gt_pos_posted-gjahr。

在进一步分析中,我们发现这是一个性能错误,因为此查询未遵循针对所有条目编写选择查询的基本最佳实践。

1)在用于所有条目之前,不会删除重复的数据

2)在对所有条目使用数据之前未对数据进行排序

以下是我们在DBACOCKPIT中注意到的数据(重复且未排序):

1。 在Where子句

中传递的重复数据

@ P80 nvarchar(10)N'0100009323'
@ P81 nvarchar(4)N'2018'
@ P82 nvarchar(4)N'8750'
@ P83 nvarchar(10)N' 0100009323'
@ P84 nvarchar(4)N'2018'<@> @ P85 nvarchar(4)N'8750'
@ P86 nvarchar(10)N'0100009323'
@ P87 nvarchar(4) N'2018'
@ P88 nvarchar(4)N'8750'

2。 在where子句中传递未排序的数据

@ P39 nvarchar(4)N' 2018 '
@ P40 nvarchar(4)N'8370'
@ P41 nvarchar(10)N'4600000023'
@ P42 nvarchar(4)N' 2019 '
@ P43 nvarchar(4)N'8370'
@ P44 nvarchar(10)N'5900000016'
@ P45 nvarchar(4 )N' 2018 '

此修复程序没有可用的注释。 请解决此性能问题,并告诉我们!

感谢与问候,
拉曼德普·考尔

付费偷看设置
发送
4条回答
派大星 ヾ
1楼-- · 2020-09-10 07:17

gt_pos_posted是一个包含键bukrs,belnr,gjahr,buzei,budat的排序表,它会根据这些键自动进行排序,因此您无需对其进行排序。 也由于以下原因而无法复制:

https://help.sap .com/doc/abapdocu_750_index_htm/7.50/zh-CN/abaptypes_primary_key.htm#!ABAP_ALTERNATIVE_1 @ 1 @

所以您应该先检查您的输入

灬番茄
2楼-- · 2020-09-10 07:05

好,我得到了您的理想。 但是在程序的那一点上,您没有可以用来修改该表的增强功能。 也许您应该提出这个问题来解决。 另外,我建议您应该在测试程序中尝试执行该查询,以确保性能问题是由于该表中的重复项引起的。

南山jay
3楼-- · 2020-09-10 07:04

如果您发现标准sap代码中的错误, 然后在 support.sap.com

报告

在此处发布详细信息并请求修复是不可能的。

Tong__Ming
4楼-- · 2020-09-10 07:10

您好奎恩·杜安·曼

感谢您的答复,我认为数据已排序。

但是选择查询使用的是我上面提到的重复日期:

@ P80 nvarchar(10)N'0100009323'
@ P81 nvarchar(4)N'2018'
@ P82 nvarchar(4)N'8750'
@ P83 nvarchar(10)N' 0100009323'
@ P84 nvarchar(4)N'2018'<@> @ P85 nvarchar(4)N'8750'
@ P86 nvarchar(10)N'0100009323'
@ P87 nvarchar(4) N'2018'
@ P88 nvarchar(4)N'8750'

此问题的原因是您提到此表具有键(bukrs,belnr,gjahr,buzei,budat),

所以这意味着5个字段的组合将是唯一的,但这并不意味着3个字段的组合" bukrs,belnr和gjahr不能重复"。

此查询的where子句使用这3个字段,这些字段与我发布的数据一样重复。

建议的解决方法:将该内部表的数据放入某个临时表中。

然后根据这三个字段(bukrs,belnr和gjahr)删除重复的条目。

然后在where子句中使用此临时表。

这将解决此查询引起的性能问题。

感谢与问候,

Ramandeep Kaur

一周热门 更多>