SSIS ->> 通过Checkoints实现SSIS的包重启(Package Restartability Fullfilled By Checkoints)
Checkpoints是实现SSIS包重载的基础。它的原理是把当前运行环境的配置、变量以及到了包运行到哪一步和哪一步失败这些信息写入到一个文件中。而且有一点很重要,Checkpoint只发生在Control Flow级别。
要实现包重载,配置上需要配置3个包级别的属性和1个任务属性:
CheckpointFilename: Checkpoint文件的文件名
CheckpointUsage: 3 options
- Never: 意思就是不用重载
- If Exists: 如果CheckpointFilename的文件存在就重载
- Always: 如果CheckpointFilename的文件不存在,包会失败
SaveCheckpoints: 意思很明显,要不要记录checkpoints.
上面那三个配置都是包级别的,下面这个是task级别的属性设置:
FailPackageOnFailure: 如果你希望你的包里面的每一个control flow的task都具备重新执行的能力,就必须把每一个task的这个属性都设置为true;
虽说Checkpoint只发生在Control Flow级别,但是通过简化Data Flow的逻辑或者说把每一个Data Flow的工作量细化,再结合raw file这种task来staging数据实现所谓的“Data Flow”级别的重载能力。
有两点点很重要需要说一下,CheckPoint的这种重启是基于”时间线“的。基于时间线的意思就是如果现在有一个包是这样的:

我曾经做过这样一个假设,如果说Package1和Package2分别代表着加载数据到不同的stage表里面,两种间没有先后的依赖关系,而上面这样的设计是为了利用SSIS的同步执行特性来同时执行Tasks。那么假设Package1会最终遇到Error而失败,但是Package2成功完成了。我们当然希望说下次CheckPoint知道这一点并且下次不需要再执行一遍Package2这条分支,然而一直失败,最终发现CheckPoint断定是否需要重新执行同一级别的分支任务的依据是其他分支(除产生错误所在分支以外的那些)中Task完成执行的时间点是否在错误的那个Task发生错误的时间点之前。这是非常坑爹的一点。不明白微软的SSIS工具不可以做到不基于时间线而是基于结果来断定下次再度开启那些任务呢。这点其实完全解释得通也是用户需要的。假设每个分支分别负责Load数据到不同的表,我肯定不希望明明没有问题的工作流要再跑一遍啦。以上的测试结果是基于SQL Server 2014版本的SSIS。
这种用raw file实现的重启功能存在一定的弊端。首先,付出两次的IO操作 — 生成raw file然后在另一个Task里面再读出,一写一读。当中还有一些影响因素,比如raw文件存放的位置是本地还是LAN下面的文件共享服务器,存放raw文件的磁盘是什么样的阵列类型,是RAID1?RAID0?RAID5? 最理想当然是RAID0(带区卷)了,性能最好。是否采用这种方法取决于两点:是否值得和是否适用? 值得是如果说是因为网络问题需要stage数据,那么发生的频率就是成了是否要采用这种做法的一个考虑因素。是否适用是指如果每次source或者upstream进来的数据量很大,比如几百万行,那两次IO操作的代价就非常大了,是否可以考虑比如缩小extract的间隔来减小每次的数据量。
SSIS ->> 通过Checkoints实现SSIS的包重启(Package Restartability Fullfilled By Checkoints)的更多相关文章
- SSIS实践入门2:批量包的调度和SQLServer代理作业配置
趁着上一篇文章的余温,我们继续研究一下SSIS中多个包如何调度,难道需要一个包一个包的配置调度程序吗?显然不是的,接下来我们就说一说在SSIS应用中如何批量的调度所有的作业,本文只讲述一个基本的逻辑过 ...
- 解决Sublime包管理package control 报错 There are no packages available for installation
解决Sublime包管理package control 报错 There are no packages available for installation 真的是哔了狗了,要不是我机智的重新安装了 ...
- 08. Go 语言包(package)
Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...
- [UML]UML系列——包图Package
系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类图Class ...
- JAVA获取apk包的package和launchable-activity名称(一)
背景: 每次要获取apk包的package和launchable-activity名称都需要运行doc命令,感觉好浪费感情,因为经常记不住常常的路径,但又不想把aapt设置为环境变量 我这个工具分几步 ...
- 查看Android应用包名package和入口activity名称
使用android自动化测试工具启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用aapt //aa ...
- 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)
---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...
- Android开发之查看应用包名package和入口activity名称的方法
使用android自动化测试工具monkeyrunner启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用 ...
- 包图Package
[UML]UML系列——包图Package 系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) ...
随机推荐
- MFC源码不能设置断点调试
用VS2013中MFC开发应用程序时,进入MFC源码设置断点调试.但是在调试过程中发现无法进入源码.最后发现在MFC设置的MFC的使用默认值是在共享dll中使用MFC,这就意味着MFC中的源码并没有连 ...
- C#制作高仿360安全卫士窗体(四)- 水晶按钮
项目越来越紧,我也乐此不疲.自从上次C#制作高仿360安全卫士窗体(三)出来之后,就开始有一些人在说为什么还在坚持写这么落后的东西.我想说的是,我是从事企业信息化工作的,所有程序都只对内部使用.所以只 ...
- android开发,关于android app实现静默安装自己(系统签名)
产品需求,木有办法.android系统是跟厂商定制的,保证系统开机就运行我们的app,并且实现自己静默安装,完全自动化,无需人工操作. 网上有很多办法, 1.要么要通过android 源码拿到密钥文件 ...
- Netsharp产品标识自定义设置:产品名称、版权、LOGO等
阅读本文请先阅读Netsharp下载及环境搭建 Netsharp本身是一个业务基础平台,Netsharp本身基础上开发的业务产品对客户才有价值,客户看到的产品应该不是Netsharp而是具体的业务产品 ...
- AngularJS打印问题
http://stackoverflow.com/questions/22189544/print-a-div-using-javascript-in-angularjs-single-page-ap ...
- bzoj 3232 01分数规划+最大权封闭子图判定
我们的目标是使v/c最小化,所以构造函数g(x)=v-x*c,那么 二分一个X,判断当时的v-x*c的值是多少,然后根据g(x)函数的 单调递减性来二分,判断,直到g(x)=0的时候当前的X就是答案. ...
- bzoj 2038 莫队算法
莫队算法,具体的可以看10年莫涛的论文. 大题思路就是假设对于区间l,r我们有了一个答案,那么对于区间l,r+1,我们 可以暴力的转移一个答案,那么对于区间l1,r1和区间l2,r2,需要暴力处理 的 ...
- SQLSERVER中WITH(NOLOCK)详解
在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST .有关 NOLOCK 和 READPAST的一些技术知识 ...
- struct{0}二
一直以为 ]={};是把a的所有元素初始化为0,]={};是把a所有的元素初始化为1. 调试的时查看内存发现不是那么一回事,翻了一下<The C++ Programming Language&g ...
- 利用sublime的snippet功能快速创建代码段
在前端开发中我们经常会输入相同的一些基本代码,例如常用的jquery引用,bootstrap框架,cssreset等等,如果每次使用时在复制粘贴感觉很麻烦,这里介绍一种更为简洁的方法 利用sublim ...