我們的應用程序中使用SimpleJdbcTemplate的Oracle SQL查詢永遠不會(幾乎)出現。查詢非常長,連接近15個表格,選擇大約100個字段等等。Oracle SQL Query在JdbcTemplate和SimpleJdbcTemplate中花費太長時間
該查詢將近8500個字符,使用MapSqlParameterSource實例向其添加6個綁定變量)。我已經在Row Mapper方法調用中放置了足夠的日誌消息,儘管這些消息從不被打印。
在SQL * Plus & SQL Developer中,用實際值替換綁定變量後的相同SQL查詢會在5-7秒內產生結果。因爲我使用邏輯在SQL查詢本身中實現分頁支持,結果只有15條記錄。
我試過JDBCTemplate & SimpleJdbcTemplate。 任何想法可能會出錯?
更新::
我能夠縮小問題的範圍。我的查詢包含一個同義詞作爲LEFT OUTER JOIN(引用不同的模式表)正在減慢整個查詢。當我將這個連接與綁定變量一起使用時,發生了這種情況。當我在SQL Developer & SQL * Plus中硬編碼綁定變量的值時,查詢運行正常。但是當我使用綁定變量時,這些工具中也發生了同樣的情況(掛起情況)。
目前,我指的是下面的鏈接繼續糾正我的DBLINK /同義詞使用, Getting a ResultSet/RefCursor over a database link
感謝,
創建連接時沒有具體的JDBC配置參數。我使用DriverManager.createConnection調用完成了使用簡單JDBC連接(不帶DataSource/Spring)測試相同的SQL。同樣的行爲也針對此連接重複。我在同一連接中嘗試了兩種優化器模式,並重復執行了SQL語句。但沒有運氣! – 2013-04-23 09:36:37
如果您有權限,可以運行「從v $參數中選擇值,其中name ='optimizer_mode';」看看你的兩個會話是否有相同的設置。如果您沒有權限,則仍然可以使用alter語句在sql開發者中手動設置優化器模式。如果查詢以選定模式快速運行,則在JDBC連接中使用相同的alter語句,並查看它是否仍然執行緩慢。 – Devolus 2013-04-23 10:17:31
您也可以嘗試在聲明中使用提示。也許oracle爲這些語句使用不同的執行計劃。 – Devolus 2013-04-23 10:23:52