执行选择查询时的DB2性能问题

时间:2019-07-03 20:24:05

标签: db2 query-performance db2-zos

我有这个查询:

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。

1 个答案:

答案 0 :(得分:0)

SQL0905N, ASUTIME resource limit exceeded for query against mainframe

您遇到了资源限制问题。

  

问题

     

本文档提供了有关何时进行故障排除的疑难解答信息。   应用程序针对DB2 UDB for z / OS数据库运行查询,并且   遇到错误:SQL0905N由于资源原因执行失败   超出限制。资源名称=“ ASUTIME” ...

     

原因

     

超出的资源是在DB2®中找到的ASUTIME参数   适用于z /OS®表SYSIBM.DSNRLST01的Universal Database™(DB2 UDB)。   ASUTIME指定了每个允许的最大处理器服务单元   动态SQL语句(例如SELECT,UPDATE,INSERT或DELETE)。

     

问题详细信息,完整错误消息的示例如下:

     

COM.ibm.db2.jdbc.DB2Exception:[IBM] [CLI驱动程序] [DB2] SQL0905N   由于超出了资源限制,执行失败。资源资源   名称=“ ASUTIME”,限制=“ 000000000184” CPU秒(“ 000005206074”   服务单元)源自“ SYSIBM.DSNRLST01”。 SQLSTATE = 57014

     

答案

     

重写复杂的查询,以便减少处理器服务单元   消耗或增加了ASUTIME参数。 ASUTIME参数   除动态SQL外,它还适用于存储过程。