Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1934312
  • 博文数量: 389
  • 博客积分: 7877
  • 博客等级: 少将
  • 技术积分: 4531
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-10 14:02
文章分类

全部博文(389)

文章存档

2024年(1)

2022年(1)

2021年(1)

2020年(1)

2019年(1)

2018年(3)

2017年(6)

2016年(4)

2015年(8)

2014年(15)

2013年(31)

2012年(19)

2011年(47)

2010年(33)

2009年(105)

2008年(109)

2007年(4)

分类:

2011-06-28 10:48:59

在我们的一种应用情况中,存储过程会用到临时表,DGTT
因为往临时表里面插入的数据量非常大,临时表的数据还要再次做关联操作,所以在存储过程中对这个临时表创建了索引,刚开始的时候并没有对这个临时表做runstats 结果,发现存储过程还是无法正常跑下去,因为关联的数据量太大,在确认是由于没有做runstats的原因后,就在网上搜索了一下,发现使用下面方法可以在存储过程中进行runstats

call sysproc.admin_cmd( 'runstats on table  SESSION.GT_T_SEC_AC_AR_BA_1  with distribution and detailed indexes all');

把这一段代码放到存储过程后,发现依然跟前面一样,存储过程跑很久都没有结果,这时我想起,做完runstats得commit提交的,平常我们手动做runstats或者用脚本执行db2 runstats on table时,那都会自动提交的,而在存储过程里面,则不会自动提交,必须在runstats完后进行commit提交,所以将上述代码改成下面这样,存储过程就正常了。

CREATE INDEX SESSION.GT_IDX_SEC_AC_AR_BA_1 ON SESSION.GT_T_SEC_AC_AR_BA_1(SRC_TYPE asc,SRC_STM_ID ASC,UNQ_ID_SRC_STM   ASC) ALLOW REVERSE SCANS;
    call sysproc.admin_cmd( 'runstats on table  SESSION.GT_T_SEC_AC_AR_BA_1  with distribution and detailed indexes all');
    commit;

这里还得注意,临时表跟commit提交的关系,在创建临时表时如果有跟ON COMMIT DELETE ROWS
就不能这么用了,关于这方面可以参考下面文章:



阅读(3155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~