博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据刷新中的并行改进(三)
阅读量:6271 次
发布时间:2019-06-22

本文共 3400 字,大约阅读时间需要 11 分钟。

在之前的两篇中分享了数据刷新的并行改进,其实在对很多的数据表做了切分之后,数据刷新的总体负载就基本是平均的了。如何使得刷新的过程更加平滑和完整,我们还是需要做一些工作的。
首先各个节点中都存在相同的表(其实是物化视图),所以在刷新的时候还是基本靠串行的思路来做并行的事情,怎么理解呢。可以参见下面的图片。
在有多个节点的情况下,数据从第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

转载地址:http://hlvpa.baihongyu.com/

你可能感兴趣的文章
推荐科研软件
查看>>
gradle
查看>>
如何取消未知类型文件默认用记事本打开
查看>>
[Javascript] Immute Object
查看>>
Java 关于finally、static
查看>>
Posix mq和SystemV mq区别
查看>>
P6 EPPM Manual Installation Guide (Oracle Database)
查看>>
XMPP协议、IM、客户端互联详解
查看>>
PHP写文件函数
查看>>
mysql的sql_mode合理设置
查看>>
函数连续性与可导性
查看>>
linux下libevent安装
查看>>
用ip来获得用户所在地区信息
查看>>
卡尔曼滤波
查看>>
linux下面覆盖文件,如何实现直接覆盖,不提示
查看>>
CSS3阴影 box-shadow的使用和技巧总结
查看>>
Linux下高cpu解决方案
查看>>
SQL事务用法begin tran,commit tran和rollback tran的用法
查看>>
centos7 crontab笔记
查看>>
.Net AppDomain.CurrentDomain.AppendPrivatePath(@"Libs");
查看>>