2017-09-15 50 views
0

我們正在爲我們的報告應用程序之一使用Jasper報告,並使用'SELECT'查詢來獲取數據並使用Jasper報告模板生成報告。他們是一些舊的查詢,有些沒有調整,他們的性能取決於他們採取的參數。以前的日期範圍,類別等Jasper報告導致使用SELECT語句的CURSOR問題

最近,我們遇到了奇怪的遊標問題,應用程序所支持的遊標數很高,有時高達900,這導致了一些嚴重的空間問題。我們正在手動關閉它們以暫時解決此問題。然而,這個問題一再出現,並且一直是一個嚴重的問題。

我對'SELECT'語句的理解是他們會隱式使用CURSOR方法,但要確保一旦操作完成,它們就會關閉。而且我們對應用程序方面沒有太多的控制。

調試/故障排除問題:

  • 數據庫使用 - 甲骨文,賈斯珀 - JasperReports的-3.7.0,ODBC驅動程序 - ojdbc14
  • 我們跑不過DBA查詢,看看有沒問題,它只是一個 定期SELECT查詢,我們沒有明確地創建任何遊標。

  • 將DB調用更改爲只讀狀態,不起作用。

  • 看起來像Jasper服務器使用常規的JDBC準備語句 - ODBC 驅動程序 - ojdbc14。

  • 沒有使用分頁。

問題

我們走出引線在這個問題上,如果有人能幫助我們這一點,將是巨大的。

編輯

SID = 4385具有帶有開放光標的計數

SQL_ID COUNT(*)


  • djuwsn5numsqv以下SQL 2
  • fw5920rbrun82 131 0wk7fbztn67zh 1
  • c29qmb59gggtv 1
  • 6y1ajq8xaw294 1
  • 9q3btvwzg96k6 487 ------- >>>
  • 3zzkryq60kua1 1
  • anp287ycdrnp6 1
  • 58tzy7dhpwnq4 1
  • cfgz3kzhx53jy 1
  • 0bxwy62tx9n2w 1
  • cygg3t2hc6mr2 12
  • 29s08m4n6xuwt 1

sql_id = 9q3btvwzg96k6不斷打開新的遊標。

+0

您是否收到錯誤消息?它是遊標還是會話?如果你得到一個ORA-xxxxx消息,它會幫助你發佈它。 –

+0

打開jasper-reports中的日誌記錄以獲取更多信息log4j.logger.net.sf.jasperreports.engine.query = debug –

+0

@PetterFriberg我打開了日誌記錄並監視了幾天。沒有什麼奇怪的,除了它顯示結果集被更頻繁地迭代。但是,我認爲沒關係。即使報告正在被各種用戶使用。 – puri

回答

0

本地靜態遊標已關閉。

你可以看到如下的最大打開的遊標參數:內部塊內打開

show parameter open_cursor 

NAME         TYPE  VALUE 
------------------------------------ ----------- ------------------------------ 
open_cursors       integer  300 

光標已明顯不被隱式關閉。如果他們已經關閉,我不會超過最大遊標數量。

如果遊標已經打開,請不要關閉它,只要使用它。

在任何情況下,最快的解決將是

alter system set open_cursors = 1000 scope=both; 
+0

看起來像從數據庫方面得到了照顧。我正在尋找應用程序方面的修復。 – puri