云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

阿里云_服务器配置清单_返利

小七 141 0

这是我关于快速数据访问的博客系列的第二部分。我建议您阅读我的第一篇博客,了解关于ibmdb2的FDA简介。在这第二篇博客中,我现在将集中讨论FDA语句的调优。

平均运行时间较长的FDA语句可能是Db2优化器选择的访问路径不好的标志,但也可能表明相应的ABAP应用程序提供了一个大的FOR ALL ENTRIES表作为输入表。因此,第一步是区分这两种情况。

测试程序

在下面,我将使用我在FDA上的第一篇博客中的简单ABAP测试程序的稍微扩展版本。您可以玩这个测试程序,并在任何使用FDA for ALL ENTRIES语句的测试系统上运行它。

测试程序从数据库表T100中选择100000行来填充内部ABAP表db6。之后,程序执行两个不同的FOR ALL ENTRIES语句,将数据库表T100与内部表db6连接起来。第一个FOR ALL ENTRIES语句将返回100000行,因为WHERE子句使用表T100的主键列,并且选择了表T100中的所有列。第二个FOR ALL ENTRIES语句使用相同的WHERE子句,但只返回少量行,因为该语句只为列SPRSL选择不同的值。

我们已经知道,Db2优化器可以很好地执行此测试程序中的简单语句,并且运行时不会受到优化器错误决策或错误错误错误消息的影响缺少索引。

了解SQL跟踪中的FDA语句

使用ST05跟踪FDA语句时,请确保使用的是当前的DBSL版本,包括SAP Note 2416250中的补丁。此外,还应包括SAP Note 2497337中的ABAP代码修复。否则,ST05跟踪条目可能会产生误导。

如果对测试程序进行ST05跟踪并筛选表T100,您将发现以下聚合行。新的ST05跟踪(与旧的ST05相比)默认显示一个聚合视图,在该视图中,可以根据请求显示更多详细信息。

跟踪中的最后两个语句与FDA语句相对应。第二条语句只选择两行,因为我的测试系统只包含两种语言。这两个语句的执行时间都比较长。如果您预先选择FDA声明并按上面标记的"显示单个记录"按钮,云服务器如何,您可以更详细地看到这些声明在何处花费时间。

在跟踪的"单个记录"部分,您将发现几种不同的操作类型,其中一些操作类型非常特定于FDA声明。

让我们仔细看看这个过程的不同步骤:

如果您在SQL跟踪中发现一个FDA语句,在关闭的\内存\表\数据中经过了很长的时间,轻云,试着将其与写入\内存\表\数据发送的输入元组数联系起来,判断语句执行是否太慢

在Db2的SQL缓存中解释FDA语句执行时间

在大多数情况下,您将在数据库的SQL缓存中检测长时间运行的FDA语句(打开dbaccompt并选择Performance->SQL cache或dbaccompt->Performance->Top SQL statements)。同样,问题出现了:语句的速度慢是因为它有大量的输入元组,还是因为Db2中的访问路径不好?

在查看SQL缓存数据时,免费网站自助建站,我建议使用ALV屏幕中的Change Layout按钮添加列例程调用。应用于我们的测试语句,您可能会看到以下数据:

正如您所看到的,Routine Invocations列大致包含FDA语句的输入元组数(100000)。Db2在内部统计每个执行过程中额外的五个例程调用。因此,您可以使用以下公式计算ABAP应用程序的FOR ALL ENTRIES表中的平均行数:

=/–5

这对于您的语句分析是非常重要的信息。这个公式可以应用于大多数情况,除了以下不适用的情况:

Db2使用的是一个次优访问路径,其中内存表函数执行了多个时间到了在我的第一篇博客中提到,通常需要一个嵌套的循环联接,在联接的外侧有一个内存表。在这种情况下,每个语句执行只执行一次内存表。然而,Db2可能已经做出了相反的决定。因此,如果您看到大量的例程执行,这也可能是访问路径不正确的迹象,您应该解释语句以检查内存表是否在正确的位置使用。SQL语句正在使用其他外部函数。然而,这种情况几乎从未发生过。CDS在SAPTOOLS模式中引入了更多的外部函数,但它们很少在ABAP应用程序中使用。

如果将语句的数据库执行时间与ST05跟踪中显示的运行时间进行比较,您会发现对于第二个结果集较小的语句,数据库执行时间几乎与CLOSE\ MEMORY\ TABLE\ DATA步骤的运行时间相匹配。如果第一条语句的结果集较大,则数据库执行时间长于关闭\内存\表\数据步骤的运行时间,因为获取结果集还包括一些数据库执行时间。

FDA语句的典型错误访问路径模式

在大多数情况下,对于所有条目,语句都不太复杂,WHERE子句是选择性的,并且存在与WHERE子句匹配的匹配索引。在例外情况下,如果不是这样的话,Db2可能会选择错误的访问路径。主要有两种模式: