IBM DB2 9.7触发器的性能分析

时间:2013-11-07 07:46:58

标签: triggers db2

是否有一种简单的方法来分析DB2 9.7更新/插入/删除触发器的性能?我有一种情况,当我用一组参数执行触发器时,需要1秒才能完成。当我第二次用相同的参数执行它时,执行下降到10ms。如果我用其他一些参数执行相同的触发器,它再次需要1秒。显然有一些缓存。但是,语句结构仍然相同,所以在我看来,它不需要从头开始构建任何东西。

我现在需要分析触发器以查看实际花费的执行时间。

2 个答案:

答案 0 :(得分:0)

它取决于触发器的作用。例如,如果使用一组参数,它只需要更新一行,但如果使用另一组参数,它应该更新一百万行,那么性能就不一样了。

触发器没有缓存,所有事务都直接写入事务日志。这就是您应该分析触发器中使用的查询的访问计划的原因。您还应该分析IO和其他相关元素,以发现不同集合的情况。

不要忘记更新统计信息,为什么不更新,对所涉及的表执行重组。

答案 1 :(得分:0)

  

感谢AngocA的回答。触发器会插入一组新行   另一张桌子。在后续运行中,触发相同数量的行   并补充说。这就是为什么我对第一个为什么有点困惑   运行缓慢,但下一次完全相同的运行速度要快10倍。

它与加载表格有关。 DBMS通常没有内存中的所有表(或表的所有数据)。数据库在页面上存储数据。每个页面都可以(并且应该)包含多行。当你添加一行时,它将被添加到一个表中,该表通常(不完全确定我是否应该总是写在这里)按表的主键排序。因此,根据要添加到表中的行,需要写入不同的页面。如果尚未加载,则需要先加载,这需要花费时间。下次需要编写类似的行时,可能会将其放在同一页面上。

如果页面已满,则需要拆分,以确保可以在正确的位置写入新记录。因此,根据数据,数据库需要完成不同的工作。但是,在所有情况下,数据都需要立即保存到数据库中。所以你总是需要等待写完成。

如你所见,可能会有一些兑现。这对数据库来说是正常的。

关于你原来的问题;看一下触发器的sql,找出访问路径是什么。