我们正在将Jasper报告与java用于我们的报告应用程序之一,并使用“SELECT”查询来获取数据并使用Jasper报告模板生成报告。它们是一堆旧查询,有些没有调整,它们的性能取决于它们所采用的参数。出日期范围,类别等
最近,我们遇到了奇怪的光标问题,应用程序持有的游标数量很高,有时高达900,这导致了一些严重的空间问题。我们正在手动关闭它们以暂时解决此问题。然而,这个问题一次又一次地重新出现,一直是一个严重的问题。
我对'SELECT'语句的理解是它们将隐式使用CURSOR方法,但确保一旦操作完成,它们就会被关闭。而且我们对应用程序方面没有太多控制权。
调试/解决问题:
我们通过DBA运行查询并且没有看到任何问题,这只是一个问题 常规SELECT查询,我们没有明确创建任何游标。
将数据库调用更改为只读状态,不起作用。
看起来Jasper服务器使用常规JDBC预处理语句 - ODBC 司机 - ojdbc14。
未使用分页。
问题:
我们在这个问题上缺乏线索,如果有人可以帮助我们,那就太棒了。
修改
SID = 4385具有以下具有打开游标计数的sql
SQL_ID COUNT(*)
sql_id = 9q3btvwzg96k6不断打开新游标。
答案 0 :(得分:1)
本地静态游标已关闭。
您可以看到max open cursors参数,如下所示:
show parameter open_cursor
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
open_cursors integer 300
在内部区块内打开的游标显然没有被隐式关闭。如果他们被关闭了,我就不会超过打开游标的最大数量。
如果光标已经打开,则不要关闭它,只需使用它。
无论如何,最快的解决方法是
alter system set open_cursors = 1000 scope=both;