当前位置:数据库 > DB2 >>

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
 

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,