海量資料遷移之使用shell啟用多個動態並行
如果啟用了多個並行的程式,可能會有資源分配上的問題。
比如下面有10個表,100代表預計的時間為100分鐘。
table1 100
table2 90
table3 90
table4 80
table5 80
table6 70
table7 60
table8 60
table9 50
table10 40
如果分為4個程式來並行執行,可能一種比較理想的方案就是
parallel1: table1,table8
parallel2: table2,table5,table9
parallel3: table3,table6,table9
parallel4: table4,table7
但是在實際的執行中,可能因為表的分割槽,表的資料型別,表的儲存的不同,可能實際的執行時間會有很大的差別,
可能paralle2,3,4已經執行完了,而parallel1還沒有執行完50%。
這樣,table8就一直pending在那了。
在這樣的情況下,可以考慮使用動態並行,就是能夠在後臺啟用一些並行的程式,比如需要4個並行程式,就使用nohup啟用4個並行的程式。
不做具體的資料操作。
parfile=par2_tab_parall.lst
logfile=`echo $parfile|awk -F. '{print $1}`".log"
while true
do
if [ -f $parfile ]
then
tab_exists_flag=`cat $parfile |wc -l`
if [ ${tab_exists_flag} -eq 0 ]
then
sleep 5;
elif [ ${tab_exists_flag} -gt 0 ]
then
tab_name=`cat $parfile`
ksh appendata.sh $tab_name >> $logfile
touch ${parfile}.tmp
mv ${parfile}.tmp ${parfile}
fi
fi
done
我們使用appendata.sh來模擬實現資料的插入,其實不會做資料的真實插入,這是模擬日誌的內容。
echo $1
sqlplus -s n1/n1 <
set timin on
set pages 0
select 'insert into '||'$1;' from dual;
select 'commit;' from dual;
EOF
if [ $? -eq 0 ]
then
echo '' >parallel1.lst
fi
使用如下的命令來啟用一個程式,比如下面的命令啟用程式2,如果啟用其他的程式,命令類似
nohup ksh par2.sh > par2_tab_parall.log &
只需要在一個檔案中放入處理的表名即可。如果是程式2,就在par2_tab_parall.lst中放入表名,假設表為test
par2_tab_parall.lst
[ora11g@rac1 parallel]$ cat par2_tab_parall.lst
test
如果放入表test,之後,就會發現第2個程式就開始處理表test了
test
insert into test;
Elapsed: 00:00:00.00
commit;
Elapsed: 00:00:00.01
再放入一個表,馬上就會發現程式開始處理表tab_test了,如果沒有表的時候,它就在後臺做sleep工作。
[ora11g@rac1 parallel]$ echo tab_test > par2_tab_parall.lst
tab_test
insert into tab_test;
Elapsed: 00:00:00.01
commit;
Elapsed: 00:00:00.00
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347042/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用impdp,expdp資料泵進入海量資料遷移
- 海量資料儲存之動態SchemaOU
- EF 中多個資料庫遷移資料庫
- 使用dbeaver 用csv 檔案進行資料遷移
- 如何使用 abp 建立 module 並應用單獨的資料庫遷移資料庫
- 運維效率之資料遷移自動化運維
- 用rman遷移資料庫資料庫
- Pytorch使用資料並行,單機多卡PyTorch並行
- 用prebuild mv 方法遷移資料Rebuild
- Devops-運維效率之資料遷移自動化dev運維
- Laravel 學習之資料庫遷移Laravel資料庫
- ORM實操之資料庫遷移ORM資料庫
- Kubernetes怎麼進行NFS動態儲存遷移NFS
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- PhoneTrans for mac(資料遷移工具) v5.1.0 (20210107)中文啟用版Mac
- Laravel migration (資料庫遷移) 的使用Laravel資料庫
- 使用docker compose一鍵啟動多個應用Docker
- 多程式PHP指令碼實現海量資料轉移總結PHP指令碼
- echarts遷移圖動態載入Echarts
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- ABP (.Net Core 3.1版本) 使用MySQL資料庫遷移啟動模板專案(1)MySql資料庫
- 杉巖資料銀行Documentum遷移方案
- Kafka資料遷移Kafka
- Harbor資料遷移
- gitlab資料遷移Gitlab
- 資料庫遷移資料庫
- 用begin backup的方式遷移資料庫資料庫
- 達夢遷移工具之MySQL資料庫遷移到達夢MySql資料庫
- “遷移策略+新容器執行時”應對有狀態應用的冷熱遷移挑戰
- 支援多種資料庫型別的遷移工具資料庫型別
- 資料庫上雲實踐:使用Ora2pg進行資料庫遷移資料庫
- 資料遷移(1)——通過資料泵表結構批量遷移
- 安卓shell 移動某個時間之後的檔案到另外一個資料夾 命令記錄安卓
- Mysql資料遷移方法MySql
- 【Hive】hive資料遷移Hive
- 【Redis】 redis資料遷移Redis
- redis資料庫遷移Redis資料庫
- congregate遷移gitlab資料Gitlab
- 系統資料遷移