資料重新整理中的並行改進(三)

jeanron100發表於2015-06-25
在之前的兩篇中分享了資料重新整理的並行改進,其實在對很多的資料表做了切分之後,資料重新整理的總體負載就基本是平均的了。如何使得重新整理的過程更加平滑和完整,我們還是需要做一些工作的。
首先各個節點中都存在相同的表(其實是物化檢視),所以在重新整理的時候還是基本靠序列的思路來做並行的事情,怎麼理解呢。可以參見下面的圖片。

在有多個節點的情況下,資料從第1個節點到第3個節點重新整理的時候,內部還是序列的,只是在第1個節點重新整理的時候使用了並行,把700多個表分成了多個重新整理的程式來並行處理。對於各個節點之間的重新整理還是序列的過程。
就如同我在圖中用綠色標註的那樣。
我們先來實現節點的序列,可以使用如下的指令碼來使得某個指令碼在對應的節點中都會依次執行。
#ref_active.sh
sqlplus /nolog < conn prdrefssca/xxxxx@xxxx
set timing on
set echo on
spool $1_prdrefssca.log
@$1
spool off
conn prdusg1ssca/x@xxxx
spool $1_prdusg1ssca.log
@$1
spool off
conn prdusg2ssca/xx@xxx
spool  $1_prdusg2ssca.log
@$1
spool off
conn prdusg3ssca/xxxx@xxxx
spool  $1_prdusg3ssca.log
@$1
spool off
conn prdusg4ssca/xxx@xxxx
spool  $1_prdusg4ssca.log
@$1
spool off
EOF

在這個基礎上,使用使用並行切分的指令碼split_parall.sh 把多個表切分為指定的並行,比如700多個表按照資料情況切分成10個並行的重新整理程式。
然後就可以把指令碼 ref_active.sh利用起來,生成動態的指令碼,其實這個過程中會動態生成一些指令碼。類似這樣的形式 ksh ref_active.sh  par1_tab_parall.lst.sql
最後把這些指令碼都合併為一個指令碼,在執行的時候就會更加方便,最後的指令碼是ref_all_active.sh

怎麼具體實現呢。
##### batch_split_parall.sh
tmp_ext_base_dir=`pwd`
ext_base_dir=`dirname $tmp_ext_base_dir`

ksh $ext_base_dir/append/split_parall.sh tab_parall.lst $1
for i in {1..$1}
do
cat ./par${i}_tab_parall.lst
echo "ksh ref_active.sh " par${i}_tab_parall.lst.sql    > tmp_par${i}_tab_parall.sh
echo "ksh " tmp_par${i}_tab_parall.sh "&"  >> ref_all_active.sh
done

生成的動態指令碼如下:
-rw-r--r-- 1 xxxxx dba  2132 Jun 25 19:07 par10_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  4690 Jun 25 19:07 par10_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba   101 Jun 25 19:06 par1_tab_parall.lst
-rw-r--r-- 1 xxxxx dba    53 Jun 25 19:07 par1_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba   976 Jun 25 19:07 par2_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  2101 Jun 25 19:07 par2_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba  1997 Jun 25 19:07 par3_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  4345 Jun 25 19:07 par3_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba  2077 Jun 25 19:07 par4_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  4607 Jun 25 19:07 par4_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba  2055 Jun 25 19:07 par5_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  4557 Jun 25 19:07 par5_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba  2016 Jun 25 19:07 par6_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  4489 Jun 25 19:07 par6_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba  2059 Jun 25 19:07 par7_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  4618 Jun 25 19:07 par7_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba  2038 Jun 25 19:07 par8_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  4568 Jun 25 19:07 par8_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba  2118 Jun 25 19:07 par9_tab_parall.lst
-rw-r--r-- 1 xxxxx dba  4647 Jun 25 19:07 par9_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba   416 Jun 25 18:29 ref_active.sh
-rw-r--r-- 1 xxxxx dba   301 Jun 25 19:07 ref_all_active.sh
-rw-r--r-- 1 xxxxx dba 73730 Jun 25 19:06 tab_parall.lst
-rw-r--r-- 1 xxxxx dba  2096 Jun 25 18:25 split_parall.sh
-rw-r--r-- 1 xxxxx dba    44 Jun 25 19:07 tmp_par10_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par1_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par2_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par3_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par4_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par5_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par6_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par7_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par8_tab_parall.sh
-rw-r--r-- 1 xxxxx dba    43 Jun 25 19:07 tmp_par9_tab_parall.sh

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1712324/,如需轉載,請註明出處,否則將追究法律責任。

相關文章