我有此查询:
SELECT INVOICE_NUMBER, INVOICE_SEQ_NUMBER, FILE_NUMBER, MAX(INVOICE_SEQ_NUMBER) OVER (PARTITION BY INVOICE_NUMBER) AS MAX_INV_SEQ_NUM
FROM (SELECT A.INVOICE_NUMBER, A.INVOICE_SEQ_NUMBER, B.FILE_NUMBER,
DENSE_RANK() OVER (ORDER BY A.INVOICE_NUMBER) as seqnum
FROM TABLE1 A JOIN
TABLE2 B
ON A.INVOICE_NUMBER = B.INVOICE_NUMBER AND
A.INVOICE_SEQ_NUMBER = B.INVOICE_SEQ_NUMBER
) t
WHERE seqnum <= 500;
它在表中的10000个记录工作正常,但我们今天添加了更多( 30k(,并计划在表中添加更多( 250-300k(。现在我遇到了这个错误:
DB2 SQL Error: SQLCODE=-905, SQLSTATE=57014, SQLERRMC=ASUTIME;000000000007;000000009000;SYSTEM PARAMETER, DRIVER=3.65.77
查询是不正确的还是未针对具有大量记录的表进行了优化?我们应该如何处理?索引一些列或重组查询?
更新:显然,我对添加到表中的记录数量有误,目前我们在表1中有200万个记录,而在表2中有400万个记录,而不是最初提到的30k。
sql0905n,针对大型机的查询超出了asutime资源限制
您遇到了资源限制问题。
问题
本文档为您的何时提供故障排除信息 应用程序针对Z/OS数据库的DB2 UDB运行查询,并且 遇到错误:由于资源而导致的SQL0905N执行失败 超过限制。资源名称=" asutime" ...
原因
超过的资源是在DB2®中找到的ASUTIME参数 Z/OS®表sysibm.dsnrlst01的通用数据库™(DB2 UDB(。 Asutime指定最大处理器服务单元 动态SQL语句(例如,选择,更新,插入或删除(。
问题详细信息完整错误消息的示例如下:
com.ibm.db2.jdbc.db2 exception:[ibm] [CLI驱动程序] [DB2] SQL0905N 由于资源限制超出了未成功的执行。资源 name =" asutime",limit =" 000000000184" CPU秒(" 000005206074" 服务单位(源自" sysibm.dsnrlst01"。sqlstate = 57014
答案
重写复杂的查询,以便更少的处理器服务单位是 消耗或增加asutime参数。Asutime参数 除了动态SQL外,还适用于存储过程。
我用DB2查询访问了这一点,该查询只是返回记录计数。我可以运行SELECT语句,但不能以相同的连接来计数。这是一个简单的查询,只有几个连接。我能够使用其他DB2驱动程序运行相同的查询。