海量数据迁移之使用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 time on
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

 

时间: 2024-11-09 09:52:42

海量数据迁移之使用shell启用多个动态并行的相关文章

海量数据迁移之通过shell估算数据量

在数据迁移的时候,需要根据用户量来评估需要在表空间理添加的空间大小.比如迁移5百万的用户和迁移200万,两者需要添加的数据量差别很大,在资源有限的情况下,需要一些比较合理的估算,毕竟在生产环境中做数据加载的时候报了空间不足的问题就是准备太不充分了,稍后的数据修复任务就难上加难. 比如我们现在客户提供了如下的信息,需要我们评估一下在目前的用户基础上迁移几百万用户需要添加的空间. 表空间假设是如下的存储情况.DATA开头的表空间存放表数据,INDX开头的表空间存放索引数据. Tablespace I

海量数据迁移之一个误操作的问题总结

在生产环境中的数据迁移还是很惊心动魄的,毕竟生产的数据不容许有任何潜在的问题,很小的问题也可能导致业务的终端,这个时候dba的角色是很重要的,如果dba犯了一个很细小的问题,在海量数据迁移中可能会导致灾难性的结果,所以今天和大家讨论一下关于由vi误操作导致的问题及总结. 结合今天早上的例子来说明. 目前生产环境已经有大量的用户数据了,需要从老系统迁移一批用户数据过来,一切都在安装好计划进行准备和操作.我是采用了外部表的方式,把一个很大的表分为了几十上百个外部表,采用insert方式加载的. 数据

海量数据迁移之分区并行切分

在海量的数据迁移中,如果某个表特别大,可以考虑对表中的分区进行切分,比如某个表有100g,还有100个分区,那么可以考虑针对这100个分区,那么可以考虑把这100个分区看成100个表进行并行抽取,如果某个分区数据比较多,可能生成5个dump,那么着100个分区,就可能生成105个分区以上. 那么如果有100多个表,那么可能分区都算进来就可能有上千个.如何对这上千个dump进行最快的加载呢. 可以考虑基于分区的并行切分,里面可能还涉及一些算法的知识. 目前生成了如下的数据报告,我们需要基于这个报告

海量数据迁移之分区表批量insert性能改进

在平时的工作中接触到的分区表一般都比较大,而且分区也少则几十,多则几百,上千. 在数据迁移的时候,分区表的迁移更是块大骨头,因为数据量太大,而且有些分区表中还有一些lob字段,想直接通过sqlldr来迁移还是需要做一些额外的工作. 如果通过datapump分区导出数据,批量导入,也是一种思路,不过需要考虑好并发的进程. 通过oracle_datapump来做数据的导入,可能更为灵活,但是不是绝对的.最近就做了一些相关的数据导入测试,感触不少. 比如,目前我们需要导入的两个大表,一个是memo,一

海量数据迁移之外部表并行抽取

在10g开始的新特性中,外部表是一个不容忽视的好工具.对于大型项目中海量数据使用sqlloader是一种全新的方式,不过很明显,sqlloader的可扩展性更强,但是基于oracle平台的数据迁移来说,外部表的性能也不错.对于数据迁移来说也是一个很好的方案. 使用外部表来做数据迁移,可以"动态"加载数据,能够很方便的从数据库中加载数据,对于数据校验来说就显得很有优势了,而对于sqlloader来说,可能得等到数据加载的时候才知道是不是有问题,如果对于数据的准确性要求极高,可以使用外部表

海量数据迁移之外部表切分

在前几篇中讨论过海量数据的并行加载,基本思路就是针对每一个物理表都会有一个对应的外部表,在做数据迁移的时候,如果表有上百G的时候,一个物理表对应一个外部表性能上会没有任何提升.如果需要做数据插入的时候,对undo是极大的挑战,从某种程度上而言,性能应该要比datapump要差.这个时候可以考虑一个物理表对应多个外部表,比如一个表有100G.可以考虑生成100个external dump 文件,然后加载生成100个外部表,每个dump文件对应一个外部表,这样做数据的插入的时候就相对容易控制了.每一

海量数据迁移之数据加载流程

在之前的博文中分享了关于数据抽取流程的一些思路,整体来说,数据的抽取是辅助,数据的加载是关键.加载的过程中每一步需要格外关注,稍有偏差就可能造成数据的损坏或者丢失. 为了更加清晰的说明通过外部表来实现数据加载的流程,特意画了如下的流程图. 在这个图中,数据的抽取是左边的部分,可以根据需要生成对应的外部表dump文件. 这个时候可以在目标环境中也创建只读用户,外部表用户,只读用户中只存放同义词,外部表用户中存放的是需要加载的外部表,整个外部表的加载过程不会消耗额外的物理空间,而且加载啊速度极快.

如何将海量数据迁移上云

背景 众所周知,云计算的出现改变了IT世界的格局,更低廉的成本和更加易于扩展的特点都成为了传统软件行业改变的动力.而阿里云在此基础上提供了更加完善的服务,更高的可靠性,以及更加低廉的价格,成为了业界值得优先考虑的品牌. 如果您有成千上万的文档.图片.音视频文件需要上传到OSS上来,或者从其他的云存储产品上迁移过来,如何才能应对规模如此庞大的数据迁移,如何处理迁移过程中业务上的新增数据? OSS有一套完整的无缝数据迁移方案可以帮您解决这些问题. 方案 整个迁移过程分为下面几个步骤: 配置Bucke

阿里云发布移动数据中心“闪电立方”:为PB级海量数据迁移而生 

在人人习惯网络下载的时代,像快递一样来搬数据显得有点奇怪?其实这才是企业需要的.  6月10日,在2017年云栖大会·上海峰会上,阿里云发布了一款重磅级产品--"闪电立方".它像是一个可移动的"数据中心",通过一个安全的存储硬件,可将100TB数据安全地一次性转移,最快24小时即可完成PB级数据迁移. 尽管当前网络带宽不断增长,但相对于数据量的增长而言好像还不够,尤其是当数百TB以上数据要在不同的服务器中转移时.物理迁移则是被业内公认的最佳数据迁移方案,<计算