【问题标题】:How to see the times statements take to be executed in a stored procedure DB2如何查看在存储过程 DB2 中执行语句的时间
【发布时间】:2022-11-26 01:43:11
【问题描述】:

我正在尝试提高查询的性能 - DB2 中的存储过程扫描大量表和大量选择。

我想做的是找出这些语句(插入选择语句)中哪些语句持续时间更长,以及完成每个语句需要多长时间。

【问题讨论】:

  • 您的 Db2-server PLATFORM 是什么(Z/OS、i 系列、linux/unix/windows/cloud,因为这决定了可用于分析的工具。另外请为 Db2-server 平台使用正确的标签。指定 Db2-server 版本也(同样,工具可以是特定于版本的)。
  • IBM Data studio 4.1.4 版(带有最新修复程序)还提供了可让您分析存储过程的工具。

标签: database db2


【解决方案1】:

如果例程运行的静态语句仍在包缓存中,则:

SELECT 
  S.STMTNO -- Line number in SP
, P.NUM_EXEC_WITH_METRICS
, P.STMT_EXEC_TIME
-- Huge number of other counters from the package cache here:
--, P.* 
, P.STMT_TEXT
FROM SYSCAT.ROUTINES R
JOIN SYSCAT.ROUTINEDEP D ON (D.ROUTINESCHEMA, D.SPECIFICNAME, D.BTYPE) = (R.ROUTINESCHEMA, R.SPECIFICNAME, 'K')
JOIN SYSCAT.STATEMENTS S ON (S.PKGSCHEMA, S.PKGNAME) = (D.BSCHEMA, D.BNAME)
LEFT JOIN TABLE (MON_GET_PKG_CACHE_STMT (NULL, NULL, NULL, -2)) P ON (P.PACKAGE_SCHEMA, P.PACKAGE_NAME) = (D.BSCHEMA, D.BNAME)
WHERE 
--(R.ROUTINESCHEMA, R.ROUTINENAME) = ('MY_ROUTINE_SCHEMA', 'MY_ROUTINE_NAME')
(R.ROUTINESCHEMA, R.SPECIFICNAME) = ('MY_ROUTINE_SCHEMA', 'MY_ROUTINE_SPECIFICNAME')
ORDER BY P.STMT_EXEC_TIME DESC

无法将包缓存中的动态语句绑定到某个例程。 也就是说,如果您的例程运行一些动态语句,您可能只能手动查找案例中的相应统计信息,例如,视觉/手动比较语句文本......

【讨论】:

    猜你喜欢
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多