【问题标题】:db2 explain stored proceduredb2解释存储过程
【发布时间】:2015-02-25 10:45:31
【问题描述】:

如何解释 IBM Data Studio 中的存储过程?

我知道存在db2expln 命令。但我想要一个解决方案来解释图形界面中的 SP。

我也知道选择一个查询然后右键单击它,存在 open visual explain 菜单进行解释但不知道解释 SP 的方式以便我可以为该 SP 设置输入值。

谢谢

【问题讨论】:

  • 输入值通常不会影响计划(reopt 被忽略)。您是否正在寻找调试您的 sp 的方法?附带说明一下,在我看来,db2exfmt 是比 db2expln 更好的工具。
  • 其实我不想调试,我只是想解释一下 SP,如果我在 SP 的正文中用查询解释它,由于在正文中使用输入参数,它会出错.这是一个复杂的 SP,有很多游标和参数在其他选择中使用
  • 哦,我明白了。如果你想在你的过程中解释一个查询,你可以用参数标记 (?) 替换参数内的参数。然后对该查询进行解释。
  • 您能否以示例作为答案来解释参数标记。我想这就是我的问题的答案。如果您在答案中有示例,我将非常感谢

标签: db2 explain ibm-data-studio


【解决方案1】:

如果我正确理解了您的要求,您有一个过程,您想在该过程中解释查询计划。我会编造一些虚假的东西来解释我的想法:

create table t 
(  x int not null primary key
,  y int not null) @

create procedure p (n int)
language sql
begin
    declare c cursor for
    select count(1) from t where y = n;
end @

假设您想解释游标中查询的计划:

db2 "explain plan for select count(1) from t where y = n"
[...]
SQL0206N  "N" is not valid in the context where it is used.  SQLSTATE=42703

由于 n 未绑定,编译器会报错。但是,将 n 更改为主机变量或参数标记会很好(注意 ":" )

db2 "explain plan for select count(1) from t where y = :n"

或:

db2 "explain plan for select count(1) from t where y = ?"

现在您可以使用 db2exfmt 查看计划:

db2exfmt -d sample -g -1 | tee q.plan

Access Plan:
-----------
Total Cost:         0.00644873
Query Degree:       1

            Rows 
           RETURN
           (   1)
            Cost 
             I/O 
             |
              1 
           GRPBY 
           (   2)
          0.0063121 
              0 
             |
              0 
           FETCH 
           (   3)
         0.00627372 
              0 
       /-----+-----\
      0               0 
   IXSCAN    TABLE:    LELLE   
   (   4)             T
 0.00613403          Q1
      0 
     |
      0 
INDEX:    SYSIBM  
SQL141230182649950
        Q1

我认为您会发现db2exfmt 是比db2expln 更好的工具,您将获得更多计划细节。

【讨论】:

  • 参数标记解决了我的问题。非常感谢。还有一件事。对于db2explain,我突出显示了查询并右键单击它,然后单击open visual explain(在图形界面-IBM Visual Studio 中)。怎么在图形界面做db2exfmt
  • 我可能误会了你。 db2expln 是一个命令行工具,db2exfmt 也是如此,所以你可能无法从图形界面运行db2exfmt(我自己只使用命令行工具,所以我不确定)。好消息是,视觉解释使用与 db2exfmt 相同的内部机制,因此您可能会在那里获得相同数量的细节。
  • 抱歉问了这么多问题。你知道解释结果中的Lock list sizeMaximum Lock List size是什么吗?
  • 那是 db cfg 参数(db2 get db cfg),但它有点离题,所以最好开始一个新的问题。
  • 我问了我的问题here。如果您回答任何关于您自己的想法,将会非常高兴。
猜你喜欢
  • 2010-11-02
  • 2014-10-26
  • 2019-11-10
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多