DB2处理数据由原来六小时优化到二十分钟(一)
?????? 很高興,你閱讀此篇我自己整理的文章,首先需要說明一下,此篇文章適合初學(xué)和剛接觸DB2的開發(fā)人員閱讀,如果你自認(rèn)覺得能力很好,可以繞開。
????? 此篇文章也是結(jié)合我實(shí)際經(jīng)驗(yàn)對(duì)其進(jìn)行整理,也是自己的一個(gè)總結(jié)。在前段時(shí)間給銀行做項(xiàng)目,由于銀行的數(shù)據(jù)是由第三方公司開發(fā),故我們需要的接口數(shù)據(jù)需要我們自己來處理,經(jīng)過幾次交涉,最終決定我們自己來處理數(shù)據(jù)。當(dāng)看到數(shù)據(jù)中心發(fā)來的數(shù)據(jù)文件時(shí),哇,一下處理16張表,表關(guān)系如何,我們還要自己去分析。經(jīng)過一周時(shí)間對(duì)表關(guān)系進(jìn)行分析,然后著手準(zhǔn)備如何將16張表數(shù)據(jù)整理成一張我們系統(tǒng)需要的接口表,這也是一個(gè)難題。
在這里大概說一下處理數(shù)據(jù)的要求:
1. 根據(jù)業(yè)務(wù)關(guān)系從16張表取出一張表數(shù)據(jù)。
2. 在銀行提供的16張表對(duì)應(yīng)的txt文件有一半的數(shù)據(jù)量在百萬以上。并且每天都是全量
3. 必須每天將16張表數(shù)據(jù)導(dǎo)入DB2數(shù)據(jù)庫(kù)中,導(dǎo)入之前需要先清空16張表
4.必須在早上把數(shù)據(jù)處理完畢。不能影響白天業(yè)務(wù)。
根據(jù)以上要求,自己開始著手寫處理數(shù)據(jù),想到對(duì)數(shù)據(jù)處理,就采用了DB2的存儲(chǔ)過程。但是像清空表等很多都是影響效率的。
第一:清空表優(yōu)化
開始我們清空表用的是
db2 delete from tablename;
但是這樣速度是超級(jí)慢,并且如果采用delete會(huì)記錄日志,影響數(shù)據(jù)庫(kù)性能。
后來我們采用的是:
db2 import from d:\empty.del of del replace into tablename
empty.del是一個(gè)空的文件。這樣執(zhí)行起來只需幾秒時(shí)間就將一個(gè)表清空了。
還可以采用:
?DECLARE VAR_sql varchar(128);--
?SET VAR_sql='ALTER TABLE AUTEK.UTMCA ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE';--
?EXECUTE IMMEDIATE VAR_sql; --這種刪除也是很快的
第二:刪除優(yōu)化
在處理DB2數(shù)據(jù)過程中少用刪除delete操作,用select比刪除操作快很多。
第三:重組表結(jié)構(gòu)
當(dāng)我們使用load from 數(shù)據(jù)時(shí)候突然中斷就會(huì)導(dǎo)致 SQL0668N 具體參考我之前發(fā)的一篇文章:
http://blog.csdn.net/cuiran/article/details/7226541?Operation not allowed for reason code SQL0668N
此時(shí)我們需要db2 load from d:\empty.del of del terminate into tablename.
?
?未完待續(xù)..............
總結(jié)
以上是生活随笔為你收集整理的DB2处理数据由原来六小时优化到二十分钟(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cent OS7.6 8.0 安装Do
- 下一篇: java wgs84转西安80_如何将西