2017-12-02 335 views
0

我们偶尔会看到问题。运行SQL的存储过程运行非常缓慢。从命令行运行时,相同的SQL运行速度非常快。看来存储过程使用不同的路径。对我们来说,解决方法是放弃并重新创建过程,然后选择正确的计划。DB2 LUW 10.5 - 如何强制DB2存储过程对最优化的计划使用最新统计信息

有没有办法在运行时用指令重新执行执行计划来执行存储过程,以便每次都能获得最佳的计划。

+0

DB2 LUW版本10.5.FP8 Linux上的程序之前执行call SYSPROC.SET_ROUTINE_OPTS('REOPT ALWAYS) 。 –

回答

0

您可能不希望每次调用过程时重新编译计划,因为您首先失去了执行过程的性能优势。

当你需要重新编译它,它不应该在稳定的环境过于频繁发生,你可以使用REBIND_ROUTINE_PACKAGE系统存储过程:

call SYSPROC.REBIND_ROUTINE_PACKAGE('P', 'YOUR_SP', '') 

如果你决定你想要的计划每个程序被调用时重新创建,在创建过程中,使用多种方法described in the manual,您可以设置REOPT ALWAYS绑定选项,例如通过创建

+0

您还可以在存储过程中使用动态SQL语句(请参阅'EXECUTE'语句),因此您可以只针对单个语句,而不必每次都重新使用整个存储过程中的所有语句。 –