点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好专家
我对具有绑定变量的SQL的执行计划有疑问:
SQL1:在附加文件上按计划运行非常快
选择计数(*)
来自JHMATCH m
内连接VHBORDER bo
上m.BORDERID = bo.ORDERID
内连接VCRPTTRADINGACCVN ta
bo.CLIENTID = ta.CLIENTID
和bo.TRADINGACCSEQ = ta.TRADINGACCSEQ
和m.VALUEDATE> ='2019-06-03'
和m.VALUEDATE <='2019-06-30'
SQL2:对附件文件的计划运行非常慢
选择计数(*)
来自JHMATCH m
内连接VHBORDER bo
上m.BORDERID = bo.ORDERID
内连接VCRPTTRADINGACCVN ta
bo.CLIENTID = ta.CLIENTID
和bo.TRADINGACCSEQ = ta.TRADINGACCSEQ
和m.VALUEDATE> ='2019-06-02'
和m.VALUEDATE <='2019-06-30'
我执行了Runstats来收集表JHMATCH,THBORDER上的统计信息,并再次运行SQL1、2,但是遇到了同样的问题。 请帮助我调整SQL2。
非常感谢,
Bgs,Vinhpv。
sql1-plan.jpg (460.3 kB)
嗨,
这不是SAP数据库...随着时间的推移,SAP在注册表设置DB2_WORKLOAD = SAP下添加了越来越多的优化器开关。 这可以避免许多奇怪的优化器决策……
随着VALUEDATE范围范围谓词的改变,优化器有时会切换到HSJOIN。
HSJOIN计划在您的系统上运行缓慢。
是否有理由压缩您的表和索引? 当什么都没有压缩时,查询将导致比所需更多的I/O。 这可能是性能不佳的原因。 当表和索引较小时,DB2优化器可能还会选择一个更好的访问计划。
好的访问计划看起来还可以,但是表THBORDER上的主键并不覆盖查询中的所有谓词。 因此,DB2需要在此表上执行IXSCAN/FETCH。 将STATUS列作为INCLUDE列添加到该表的主键可能是一个好主意。 这应该在表THBORDER上启用纯IXSCAN,并使HSJOIN的吸引力降低。
问候
弗兰克
嗨,弗兰克 >
我已经成为Oracle DBA多年了,但是在DB2中是新手,并且从未使用过db2look,db2exfmt ...我将研究使用它的方法。
我想向您发送更多日志(索引,表,统计信息的结构),请帮助我解决此问题。
非常感谢Frank!
Bgs,Vinhpv
嗨,
如果不了解表和索引结构以及IXCAN运算符的EXPLAIN详细信息,很难解释那些EXPLAIN屏幕截图。 我不习惯使用这个EXPLAIN工具。 如果我正确解释了屏幕快照,则查询中的某些谓词只能用作(SARG)谓词。 这些(SARG)谓词不限制需要读取的索引页的数量。 因此,也许创建更好的索引是一个选择。
要提供更合格的答案,我至少需要涉及表的db2look输出和语句EXPLAINs的完整db2exfmt输出。
通常对于SAP事件,我们建议使用" db2support ... -sf"选项一次收集所有相关的优化器支持数据(请参阅SAP注释83819)。 这样可以避免支持往返,并且除其他外还包含db2look和db2exfmt数据...。
问候
Frank
p>
嗨,
我需要的大多数信息可能都包含在这些镜头中,但是以这种方式工作太耗时了。
如果 希望我进一步分析访问计划,请帮我一个忙,收集包括db2look和db2exfmt信息在内的db2support数据。
这是一个SAP Db2数据库。 如果是,您可以打开服务连接吗?
问候
弗兰克
嗨Vinhpv,
您 认为STATUS列的基数较低是很可笑的。 但是,在这种情况下,包括STATUS列不能提供更好的索引过滤因子。 它允许仅访问表THBORDER的索引。 我相信这对包括ORACLE在内的所有传统数据库都应该有所帮助。
表和索引的压缩会花费更多的CPU周期来进行页面压缩/解压缩。 另一方面,它可以减少不必要的I/O,从而节省CPU周期。 通常,压缩的净效果为正。 在SAP系统上,建议对所有表和索引使用压缩。
在Db2上,您可以在静态压缩和自适应压缩之间进行选择。 由于具有静态表字典和页面级字典,因此自适应压缩可提供更好的压缩率。 我看到的例子很少,但由于可用空间搜索开销(非常宽的表具有较低的压缩率和较高的DELETE/INSERT率)而导致自适应压缩会产生问题。 在您的示例中应该不是这种情况。
据我所知,ORACLE压缩仅使用页面级字典。 因此,压缩在ORACLE上的表现可能会有所不同。
Regard
Frank
Hi Frank,
我想通过波纹管发送给您db2support的输出,请帮助我解决问题。
db2support工具的输出文件:
https://drive.google.com/file/d/1x9aoGZJbuntlFBikOMr0YU7a6hUQGBpE/view?usp = sharing
https://drive.google.com/open?id=1gpQGOT2WUpq9eMiDeoQ4aLN8SrrAEPQ
非常感谢Frank!
Bgs,Vinhpv
嗨弗兰克,
根据您的建议,我创建了一个新索引,如带有主列STATUS的主键,问题已解决。
我还有其他问题。 请帮助我解释问题。
我的数据库属于OLTP系统,因此我可以对表和索引使用压缩吗? 压缩选项是否适合DML事务?
列STATUS,STATE具有很多重复值(低基数),在我看来,在列上建立索引没有用,但这种情况并不正确。
在Oracle DB中,我看到通常不使用带有<>条件或低基数列的条件WHERE在列上创建索引,并且很难选择执行困难的简单计划。 Oracle中的Optimizer似乎比DB2更好?
非常感谢您的建议!
Bgs,Vinhpv
一周热门 更多>