海量資料遷移之分割槽並行切分
那麼如果有100多個表,那麼可能分割槽都算進來就可能有上千個。如何對這上千個dump進行最快的載入呢。
可以考慮基於分割槽的並行切分,裡面可能還涉及一些演算法的知識。
目前生成了如下的資料包告,我們需要基於這個報告來對如下的表/分割槽進行切分。
REEMENT這個表不是分割槽表,所以在分割槽資訊的地方填寫了預設值'x',在資料載入的時候會進行過濾。
MEMO這個表比較大,對於分割槽partition(P0_A1000_E3),生成的dunp序號為21,22,23,總共有3個dump。在資料載入的時候就可以先載入21號dump,然後22號dump,23號dump
MEMO partition(P0_A1000_E3) 3 21..23
MEMO partition(P0_A1000_E2) 3 18..20
MEMO partition(P0_A1000_E1) 3 15..17
USR_GRP_MEMBERS x 2 1..3
REEMENT x 2 1..3
MEMO partition(PMAXVALUE_AMAXVALUE_EMAXVALUE) 1 699..700
MEMO partition(P9_A3000_E5) 2 697..698
MEMO partition(P9_A3000_E4) 2 695..696
MEMO partition(P9_A3000_E3) 2 693..694
MEMO partition(P9_A3000_E2) 2 691..692
MEMO partition(P9_A3000_E1) 2 689..690
MEMO partition(P9_A3000_E0) 2 687..688
MEMO partition(P9_A2000_E5) 2 685..686
MEMO partition(P9_A2000_E4) 2 683..684
MEMO partition(P9_A2000_E3) 2 681..682
MEMO partition(P9_A2000_E2) 2 679..680
MEMO partition(P9_A2000_E1) 2 677..678
MEMO partition(P9_A1000_E0) 2 657..658
我們現在就需要基於第三列的資訊,對錶、分割槽表進行切分。使得啟用的多個並行程式能夠最大程度的達到平衡。
我們可以使用如下的指令碼來進行表、分割槽的並行切分。
比如我們考慮啟用6個並行的程式,生成的日誌類似下面的形式。可以看到切分還是很均勻的。
move INVOICE partition(A11_B6) to par6_
move INVOICE partition(A11_B4) to par1_
move INVOICE partition(A11_B2) to par2_
move INVOICE partition(A11_B10) to par3_
move INVOICE partition(A10_B8) to par4_
move INVOICE partition(A10_B6) to par5_
move INVOICE partition(A10_B4) to par6_
move INVOICE partition(A10_B2) to par1_
move INVOICE partition(A10_B10) to par2_
move RESOURCE partition(A9) to par3_
move RESOURCE partition(A8) to par4_
move RESOURCE partition(A7) to par5_
move RESOURCE partition(A6) to par6_
move RESOURCE partition(A5) to par1_
move RESOURCE partition(A4) to par2_
move RESOURCE partition(A3) to par3_
move RESOURCE partition(A2) to par4_
move RESOURCE partition(A1) to par5_
move RESOURCE partition(A0) to par6_
213
213
213
213
214
214
指令碼如下:
par_file_name=$1
sort -rn -k3 $par_file_name > ${par_file_name}_tmp
mv ${par_file_name}_tmp ${par_file_name}
par_no=$2
obj_length=`cat ${par_file_name}|wc -l `
echo $obj_length
for i in {1..$par_no}
do
sed -n ''$i'p' ${par_file_name}> par${i}_${par_file_name}
export par${i}_sum=`cat par${i}_${par_file_name}|awk '{print $3}' | awk '{sum+=$1}END{print sum}'`
#echo `eval echo }`
done
function getMin
{
param_no=$#
for i in {1..$param_no}
do
export par${i}_=`eval echo }}`
done
min_sum=$par1_
min_par=par1_
for i in {2..$param_no};
do
j=`expr $i - 1`
tmp_cur_par=par${i}_
tmp_cur_sum=`eval echo \\${${tmp_cur_par}}`
if [ $min_sum -le $tmp_cur_sum ]
then
min_sum=$min_sum
min_par=$min_par
else
min_sum=$tmp_cur_sum
min_par=$tmp_cur_par
fi
done
echo $min_par
}
function getSumList
{
for k in {1..$par_no}
do
#export par${k}_sum=`cat par${k}_${par_file_name}|awk '{print $3}' | awk '{sum+=$1}END{print sum}'`
#echo `eval echo }`
#par_list="$par_list `eval echo }`"
#echo $par_list
tmp_sum=`cat par${k}_${par_file_name}|awk '{print $3}' | awk '{sum+=$1}END{print sum}'`
echo $tmp_sum
#tmp_par_list=${tmp_par_list} "" $tmp_sum
done
#echo $tmp_par_list
}
j=`expr $par_no + 1`
for i in {$j..${obj_length}}
do
tmp_obj=`sed -n ''$i'p' ${par_file_name}`
par_list=`getSumList`
tmp_par=`getMin $par_list`
echo 'move '`sed -n ''$i'p' ${par_file_name}|awk '{print $1 " " $2}'` ' to '$tmp_par
echo $tmp_obj >> ${tmp_par}${par_file_name}
tmp_par=0
done
for i in {1..$par_no}
do
cat par${i}_${par_file_name}|awk '{print $3}' | awk '{sum+=$1}END{print sum}'
done
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347064/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 海量資料遷移之使用分割槽並行切分匯入並行
- 海量資料遷移之分割槽並行抽取並行
- 海量資料遷移之外部表切分
- 海量資料遷移之透過rowid切分大表
- 海量資料遷移之通過rowid切分大表
- 海量資料遷移之外部表並行抽取並行
- 海量資料遷移之分割槽表批次insert效能改進
- 海量資料遷移之分割槽表批量insert效能改進
- 海量資料遷移之使用shell啟用多個動態並行並行
- 海量資料遷移之資料抽取流程
- 海量資料遷移之資料載入流程
- 海量資料處理_表分割槽
- 海量資料遷移之衝突資料篩查
- MySQL分割槽如何遷移MySql
- Oracle分割槽表遷移Oracle
- 分割槽表分批遷移
- 海量資料遷移之透過shell估算資料量
- 海量資料遷移之通過shell估算資料量
- 海量資料處理_使用外部表進行資料遷移
- 海量資料遷移之傳輸表空間(一)
- 海量資料處理_表分割槽(分割槽自動維護與歷史分割槽歸檔)
- Oracle 12C 新特性之表分割槽或子分割槽的線上遷移Oracle
- MyISAM分割槽表遷移 && 合併
- 海量資料遷移之sqlldr和datapump的缺點分析SQL
- 海量資料遷移之誤操作和防範建議
- 理解 MySQL(4):並行資料庫與分割槽(Partition)MySql並行資料庫
- MySql資料分割槽操作之新增分割槽操作MySql
- 海量資料處理_資料泵分批資料遷移
- 海量資料處理_表分割槽(線上重定義)
- 海量資料遷移之外部表載入
- 使用impdp,expdp資料泵進入海量資料遷移
- 分割槽索引的並行度索引並行
- 分割槽表並行建立索引並行索引
- 一個利用傳輸表空間和分割槽交換技術進行資料遷移的案例
- 對Oracle分割槽表進行表空間遷移並處理ORA-14511問題Oracle
- [原創]DB2 並行Export 指令碼 --分割槽資料庫DB2並行Export指令碼資料庫
- 資料泵引數partition_options 在對於遷移分割槽表的使用。
- 海量資料轉換遷移的程式碼自動生成