You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看DB2存储过程中各语句的执行耗时

定位DB2存储过程中耗时的INSERT SELECT语句

方法1:利用DB2内置监控机制

  • 开启语句级监控:执行 db2 update monitor switches using statement on 开启监控,运行目标存储过程后,执行 db2 get snapshot for dynamic sql on <你的数据库名>,在结果中筛选包含INSERT ... SELECT的语句,查看其Execution Time字段获取耗时。
  • 查询系统视图:直接通过系统视图筛选目标语句,执行:
SELECT 
  SUBSTR(stmt_text, 1, 300) AS stmt_content,
  exec_time / 1000000 AS exec_seconds,
  num_executions
FROM sysibmadm.snapdyn_sql
WHERE stmt_text LIKE '%INSERT%SELECT%'

该语句会返回所有INSERT SELECT语句的内容、执行时长(秒)和执行次数。

方法2:在存储过程中嵌入计时逻辑

手动为每个INSERT SELECT添加时间戳记录,示例如下:

DECLARE v_start TIMESTAMP;

-- 第一条INSERT SELECT计时
SET v_start = CURRENT_TIMESTAMP;
INSERT INTO target_table_a SELECT col1, col2 FROM source_table_a WHERE ...;
-- 将耗时写入日志表
INSERT INTO proc_perf_log(proc_name, stmt_detail, exec_duration)
VALUES('你的存储过程名', 'INSERT INTO target_table_a SELECT ...', CURRENT_TIMESTAMP - v_start);

-- 后续INSERT SELECT重复上述计时逻辑

执行存储过程后,查询proc_perf_log表即可获取每条语句的精确耗时。

方法3:通过执行计划辅助定位瓶颈

  • 生成存储过程执行计划:执行 db2 explain plan for call 你的存储过程名(),然后查询SYSPLAN_STATEMENTS系统表,找到对应INSERT SELECT语句的执行节点,查看ESTIMATED_COST和ACTUAL_ROWS等字段,结合实际耗时判断是否存在全表扫描、索引缺失等问题。
  • 使用db2exfmt工具格式化执行计划,命令为 db2exfmt -d <数据库名> -g TIC -w -1 -n % -s % -o plan_output.txt,在输出文件中可直观看到每条INSERT SELECT的执行路径和成本。

内容的提问来源于stack exchange,提问作者user14762650

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:20:32