2017-12-02 299 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'語句),因此您可以只針對單個語句,而不必每次都重新使用整個存儲過程中的所有語句。 –