数据刷新中的并行改进(三) (r5笔记第79天)

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

在有多个节点的情况下,数据从第1个节点到第3个节点刷新的时候,内部还是串行的,只是在第1个节点刷新的时候使用了并行,把700多个表分成了多个刷新的进程来并行处理。对于各个节点之间的刷新还是串行的过程。 就如同我在图中用绿色标注的那样。 我们先来实现节点的串行,可以使用如下的脚本来使得某个脚本在对应的节点中都会依次运行。

#ref_active.sh
sqlplus /nolog <<EOF
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

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿说1024

Docker 常用命令

11230
来自专栏从零开始的linux

tomcat多实例

安装tomcat · 复制tomcat cp -a tomcat/ tomcat2 cp -a tomcat/ tomcat3 · 修改配置文件的端口 to...

32940
来自专栏有困难要上,没有困难创造困难也要上!

Docker搭建私有镜像仓库

42380
来自专栏快乐八哥

掌握Docker命令-Docker for Web Developers(4)

1.管理镜像命令 获取镜像 docker push ubuntu:14:04 查看镜像列表 docker images 重命名image docker tag ...

22970
来自专栏王小雷

创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作

实例解析Docker如何通过commit,Dockerfile两种方式自定义Dcoker镜像,对自定义镜像的pull,push,rmi等常用操作,通过实例创建一...

30070
来自专栏吴伟祥

rz、sz是Linux同Windows进行ZModem文件传输的命令行工具

要使用rz、sz 命令。需要在系统上安装对应的 lrzsz 软件包 ,要查询是否安装了lrzsz软件包,使用如下命令:

12710
来自专栏算法修养

Docker 学习应用篇之三: Docker的简单实用

安装完Docker之后,我们就可以简单的使用Docker,来体会Docker的用处。 首先看下Docker的常用命令,都是我在实用Docker的时候用到的命令:...

40090
来自专栏Django Scrapy

docker 基本命令

一,关于docker镜像操作的基本命令 以镜像centos为例 查找镜像docker search centos 下载镜像docker pull cen...

369120
来自专栏散尽浮华

Docker容器学习梳理--容器登陆方法梳理(attach、exec、nsenter)

对于运行在后台的Docker容器,我们运维人员时常是有登陆进去的需求。登陆Docker容器的方式: 1)使用ssh登陆容器。这种方法需要在容器中启动sshd,存...

30460
来自专栏友弟技术工作室

docker容器基本操作

18570

扫码关注云+社区

领取腾讯云代金券