1. 程式人生 > >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 具體參考我之前發的一篇文章:

此時我們需要db2 load from d:\empty.del of del terminate into tablename.

 未完待續..............