本篇文章主要介绍了" 一次涉及到物化视图的DB2 Insert性能问题的诊断",主要涉及到方面的内容,对于DB2感兴趣的同学可以参考一下:
一 问题描述:今天得到Devops兄弟的报告,说某个数据插入job突然间慢了很多,平时10多分钟就能完成的,跑了10个小时左右没有完成。 Devops的Lock...
db2look -d DBNAME -e -x -l -a -o db2look.ddl
把db2look.ddl文件ftp到本地,然后输入表名xxx_xxx_domain为关键字,一个个查。在经历50多次查找下一个后,突然眼前一亮,看到如下代码:
create table DxxxOPS.xxx_USERS_MQT as (
select xxxx
union all
select xxxx
from xxx.xxx_xxx_domain nd, xxx.USERS U2
where ((ND.xxx='yyy' ) and ND.DOMAIN_xxx ='OWNER' and U2.USER_NAME = ND.xxx and U2.DELETED=0 and U2.STATUS='Active')
and nd.deleted=0 and U2.ID is not null
) group by xxxx
) DATA INITIALLY DEFERRED REFRESH IMMEDIATE ENABLE QUERY OPTIMIZATION MAINTAINED BY SYSTEM IN "xxx" ORGANIZE BY ROW;
原来是一个物化视图使用了refresh immediate, 这意味着这个物化视图所涉及的表的任何变化,都会激活这段logic来往物化视图中插入数据。难怪xxx_xxx_domain的变化会导 致users表的读操作。
9. 查看为什么这个问题最近几天才出现。
select tabname,create_time,stats_time,card,npages from syscat.tables where tabname='xxxx_USERS_MQT'
下面是结果:
xxxxx_USERS_MQT 2017-04-28-10.16.43.263915 -1 -1
原来这个表上月底才建立的。
三 解决方案:
1. 将此物化视图 refresh immediate 改为 => refresh deferred, 就是说次物化视图的数据从以前只要基表有数据更新就马上refresh => 需要使用物化视图时,手动通过“refresh table xxx"来进行数据更新。
2. 如果非得需要refresh immediate 在运行此import批量操作之前:先用 drop 这个物化视图,运行成功后重建。
以上就介绍了 一次涉及到物化视图的DB2 Insert性能问题的诊断,包括了方面的内容,希望对DB2有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_4315509_3.html