db2 - 执行选择查询时出现 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。
解决方案
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 参数还适用于存储过程。
推荐阅读
- matlab - 如何使用旋转角度和轴来旋转 3D 平面?
- unity3d - 音量变化滞后
- bluetooth - bluetoothctl utilty 中的 [prompts] 是什么意思
- computer-vision - Image.open(os.path.join(origin_path,name)).convert('P') 有什么问题吗?
- angular - 在角度 7 中使用更改检测时如何以某种方式通知用户?
- c# - 关于初始化数据库的错误 - 实体框架 6
- c# - 无法在 Visual Studio 2019 中使用连接的服务
- amazon-web-services - 如何使用 Aws Cognito 和 Aws Amplify 对用户进行身份验证
- azure-devops - Azure DevOps:组规则
- python-3.x - 如何将二分图转换为无二分图