在绑定和重新绑定时重复使用和比较访问路径

您可以指定 Db2 在可能的情况下尽量重复使用SQL语句的先前访问路径,并比较新的和先前的访问路径。

准备工作

Db2 忽略任何在 之前绑定过的软件包或软件包副本的APREUSE绑定选项。 DB2® 9 您必须在 Db2 12 中绑定或重新绑定软件包,并接受访问路径的更改,然后才能开始重新使用访问路径。 SYSIBM.SYSPACKAGE 或 SYSIBM.SYSPACKCOPY 目录表的RELBOUND列指示了 Db2 版本中最后一次装订或重新装订的包或包副本。

关于本任务

在许多情况下,您必须重新绑定软件包,应用程序才能从最新版本的性能提升中获益。 同样,在修改应用程序后,您必须重新绑定软件包,以利用新版 Db2 的功能。 然而,一个普遍的抱怨是,必要的绑定或重新绑定操作通常会导致访问路径发生变化,而这些变化有时会导致不可接受的性能下降。

不过,在重新绑定包时,您可以使用重用或比较策略来降低与重新绑定包相关的风险。 通过访问路径重用Db2 会自动指定内部语句级访问路径,以尝试强制使用之前的访问路径。 当使用BIND命令绑定一个包含既有语句和新语句的包时, Db2 仅尝试对既有语句进行重用。

重要提示: 访问路径的重用并不保证在所有情况下都能成功。 例如,依赖于不再存在的对象(如索引)的访问路径无法被重复使用。 版本不兼容也可能导致访问路径无法重复使用。 由于底层访问路径信息不明确,一些访问路径无法重复使用。 例如:访问路径指定了要使用的连接类型和匹配列的数量,但无法获得匹配列的名称。

通过访问路径比较Db2 验证新的访问路径是否与之前的访问路径匹配。

Db2 当您指定重用时,使用比较来验证成功重用后的访问路径是否与之前的访问路径匹配。 不过,当您想知道访问路径是如何变化的,而又不想阻止这些变化时,也可以单独使用访问路径比较。

过程

为防止和评估访问路径的变化,您可以在绑定或重新绑定时使用以下一种或多种方法:

  • 指定APREUSE(警告)绑定选项。
    这种方法意味着您希望 Db2 尽可能重复使用现有的访问路径。 然而,当 Db2 无法重用之前的访问路径时,您愿意接受新的访问路径。 在此选项下,当之前的访问路径无法重复使用时, Db2 会重新选择一条新的访问路径并继续处理数据包。 当每个包的处理完成时, Db2 会发送 DSNT286I 消息,报告重复使用和未重复使用的访问路径数量。

    如果您将APREUSE(警告)选项与APCOMPARE(警告)选项结合使用,即使在重复使用失败的情况下,比较仍有可能成功。 如果指定的访问路径无法应用,但 Db2 通过正常访问路径选择再次选择相同的访问路径,则可能出现这种情况。

  • 指定APREUSE(ERROR)绑定选项。
    此选项是防止访问路径更改的最谨慎方法,只有在包的所有访问路径都可以重用时,您才能接受重新绑定。
    在APREUSE(ERROR)绑定选项下,当任何访问路径无法重复使用时,在处理完所有语句后,软件包的重新绑定操作将失败。 Db2 如果指定了其他包裹,则开始处理下一个包裹。 因为重复使用也意味着比较,一个包的处理可能会因为比较失败而结束。 当所有处理完成后, Db2 会发送 DSNT286I 消息,报告可以重复使用和无法重复使用的访问路径的数量。
  • 指定APCOMPARE(WARN)选项。
    这种方法意味着您不希望 Db2 尝试重复使用旧的访问路径,而是希望识别访问路径的变化。 重新绑定操作后,某些访问路径可能会发生变化,但您愿意接受所有更改。

    因此,以下建议适用于这种方法:

    • 使用REBIND PACKAGE命令并指定计划管理策略,以便在发生不可接受的更改时切换到之前的访问路径。
    • 检查变更的数量和类型,以发现潜在问题。 您可以指定EXPLAIN(YES)或EXPLAIN(ONLY)选项,以捕获有关所选访问路径的信息。
    • 维护一个包含更改后的访问路径的包列表,以便在发生问题时帮助隔离问题。

    有关访问路径更改的更多信息,请参阅绑定或重新绑定时分析访问路径更改

    然而,当绑定操作完成后, Db2 会发送 DSNT285I 消息,指出在重新绑定操作后有多少访问路径发生了变化。

  • 指定EXPLAIN(YES)或EXPLAIN(ONLY)选项,与APREUSE(ERROR)和APCOMPARE(ERROR)或(WARN)结合使用。
    当您指定这些选项时, Db2 会在 PLAN_TABLE.REMARKS 列中插入有关重复使用或比较失败的信息。 更多信息,请参阅绑定或重新绑定时分析访问路径更改
  • 更改开始 使用 APREUSESOURCE(PREVIOUS) 或 APREUSESOURCE(ORIGINAL) 指定适当的 APREUSE 绑定选项,以重用先前或原始软件包副本中的访问路径。
    当您想使用先前或原始软件包副本的访问路径时,可以使用此方法,因为该路径无效或绑定在 DB2 10 之前的版本中,所以不符合SWTICH绑定选项的条件。
    更改结束

后续操作

检查 DSNT285IDSNT286I 消息。 如需更详细的分析,请查询以下PLAN_TABLE列,以确定绑定或重新绑定导致的访问路径变化:

  • REMARKS
  • HINT_USED
  • BIND_EXPLAIN_ONLY

您可以使用这些列中的信息来识别无法重复使用的访问路径。 您还可以检查这些语句的PLAN_TABLE行,分析当无法应用重用时, Db2 选择的访问路径。

完成分析后,您必须决定如何处理因指定了 APREUSE(ERROR) 而失败的任何软件包。 例如,您可以采用以下任何一种方法:
  • 重新绑定软件包并指定APREUSE(WARN)。 这种方法可以让您的程序包利用新功能,但可能会使程序包中的某些语句暴露在访问路径更改中。
  • 重新绑定剩余的包裹,并指定不重复使用。 这种方法可以让您的程序包利用新功能,但也会使程序包中的每个语句面临访问路径可能发生改变的风险。
  • 请勿重新装订包裹。
结束特定程序编程接口信息。