首页 > 解决方案 > 执行选择查询时出现 DB2 性能问题

问题描述

我有这个查询:

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

查询是否不正确或未针对具有大量记录的表进行优化?我们应该如何处理?索引某些列或重组查询?

更新:显然,我对添加到表中的记录数有误,此时我们在 TABLE1 中有 200 万条记录,在 TABLE2 中有 400 万条记录,而不是我最初提到的 30k。

标签: db2query-performancedb2-zos

解决方案


SQL0905N,针对大型机的查询超出了 ASUTIME 资源限制

您遇到了资源限制问题。

问题

当您的应用程序对 DB2 UDB for z/OS 数据库运行查询并遇到以下错误时,本文档提供了故障排除信息:SQL0905N 由于超出资源限制而导致执行不成功。资源名称 = "ASUTIME"...

原因

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

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

COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2] SQL0905N 由于超出资源限制而导致执行不成功。资源名称 =“ASUTIME”,限制 =“000000000184”CPU 秒数(“000005206074”服务单位)源自“SYSIBM.DSNRLST01”。SQLSTATE=57014

回答

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


推荐阅读