Oracle

如何在不超時的情況下通過 jdbc 執行數據庫繁重的查詢(Oracle)?

  • January 25, 2022

對於我們的一個應用程序(Pentaho 數據集成),我們需要通過 oracle jdbc 執行查詢。其中一些查詢的計算成本很高,並且可能需要一個小時或更長時間才能將任何行返回給客戶端。當我嘗試使用預設 jdbc 參數執行長時間執行的查詢之一時,即使數據庫仍在處理查詢(在 V $ SESSION and V $ SQL 區域)。我正在使用直接來自 Oracle 的最新 ojdbc8.jar 並執行 Oracle Enterprise 12.1.0.2.0。

編輯:這些查詢的輸出被儲存在一個單獨的數據庫中。我們環境的性質使得我們可以創建/執行任意數量的查詢,因此使用儲存過程會很麻煩。

您可以使用 PL/SQL 和調度作業來填充表或調度作業來更新物化視圖。然後,一旦更新了數據,您就可以根據需要進行查詢,因為繁重的工作將完成。您還應該嘗試調整查詢。如果您有一個包含過濾列和您需要的任何其他列的索引,那麼您可以避免讀取索引然後讀取表。如果您從低基數列開始指向高基數列的索引,則可以減少查看的行數。查看物化視圖並包括 rowid,以便您可以嘗試快速刷新。

當我嘗試使用預設 jdbc 參數執行長時間執行的查詢之一時…

是否有某些原因您不能使用該方法…

java.sql.Statement.setQueryTimeout()

…延長這些特定查詢的超時時間?

引用自:https://dba.stackexchange.com/questions/197337