问题背景:db2数据库自带了很多数据库执行情况的快照监控。可以监控执行时间最长的sql语句,排序最多的sql语句等。比如下面是通过sysibmadm.top_dynamic_sql表查询平均执行时间最长的前10条的sql语句
db2 "select substr(stmt_text,1,500) as stmt_text,average_execution_time_s,num_executions from sysibmadm.top_dynamic_sql order by average_execution_time_s desc fetch first 10 rows only"
我的问题是:sysibmadm.top_dynamic_sql这张表里的数据,更新统计周期怎么约定的,哪些参数因素影响到周期统计?也就是说比如我查询出来的前10条语句,是1小时内最长,还是1天内最长的语句?
问题案例:
以上sql语句我测试环境,第一次查询的耗时最长sql语句,耗时50秒,隔5分钟再去查询,之前的50秒语句就不见了,换成了别的语句。但生产环境,早上10点钟每隔5分钟,去查询耗时最长的sql语句,都是前一天晚上日终的相关sql语句。
sysibmadm.top_dynamic_sql视图的默认更新时间,个人认为和DB2TOP的默认更新时间相差不大,应该是2秒,如果数据库特别繁忙的时候,抓取时间顺延。这个视图里的语句是当前正在执行的,你用来查询的 “”耗时最长的sql语句“ 是用的监控工具,或者自己的脚本,应该是从程序包高速缓存PACKAGE CACHE中语句比较出来的。
第二次查询验证的细节不清楚,应该是监视用的SQL语句不同,因为两次查询 from的对象表不同。