2017-09-15 71 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