DB2处理数据由原来六小时优化到二十分钟(一)
很高兴,你阅读此篇我自己整理的文章,首先需要说明一下,此篇文章适合初学和刚接触DB2的开发人员阅读,如果你自认觉得能力很好,可以绕开。
此篇文章也是结合我实际经验对其进行整理,也是自己的一个总结。在前段时间给银行做项目,由于银行的数据是由第三方公司开发,故我们需要的接口数据需要我们自己来处理,经过几次交涉,最终决定我们自己来处理数据。当看到数据中心发来的数据文件时,哇,一下处理16张表,表关系如何,我们还要自己去分析。经过一周时间对表关系进行分析,然后着手准备如何将16张表数据整理成一张我们系统需要的接口表,这也是一个难题。
在这里大概说一下处理数据的要求:
1. 根据业务关系从16张表取出一张表数据。
2. 在银行提供的16张表对应的txt文件有一半的数据量在百万以上。并且每天都是全量
3. 必须每天将16张表数据导入DB2数据库中,导入之前需要先清空16张表
4.必须在早上把数据处理完毕。不能影响白天业务。
根据以上要求,自己开始着手写处理数据,想到对数据处理,就采用了DB2的存储过程。但是像清空表等很多都是影响效率的。
第一:清空表优化
开始我们清空表用的是
db2 delete from tablename;
但是这样速度是超级慢,并且如果采用delete会记录日志,影响数据库性能。
后来我们采用的是:
db2 import from d:\empty.del of del replace into tablename
empty.del是一个空的文件。这样执行起来只需几秒时间就将一个表清空了。
还可以采用:
DECLARE VAR_sql varchar(128);--
SET VAR_sql='ALTER TABLE AUTEK.UTMCA ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE';--
EXECUTE IMMEDIATE VAR_sql; --这种删除也是很快的
第二:删除优化
在处理DB2数据过程中少用删除delete操作,用select比删除操作快很多。
第三:重组表结构
当我们使用load from 数据时候突然中断就会导致 SQL0668N 具体参考:
http://www.zzzyk.com/database/201203/122520.html
此时我们需要db2 load from d:\empty.del of del terminate into tablename.
作者 cuiran