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) ...
随机推荐
- 阴影 box-shadow(二)
阴影 box-shadow(二) 1.阴影模糊半径与阴影扩展半径的区别 阴影模糊半径:此参数可选,其值只能是为正值,如果其值为0时,表示阴影不具有模糊效果,其值越大阴影的边缘就越模糊: 阴影扩展半径: ...
- 服务端提供的JSON数据接口与用户端接收解析JSON数据
JSON格式的服务接口:http://www.cnblogs.com/visec479/articles/4118338.html 首先来了解下JSON格式解析 json结构的格式就是若干个 键/值( ...
- Eclipse Kepler中配置JadClipse
Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不太方便.不过幸好有一个eclipse的插件JadClipse ...
- 判断js和css是否加载完成
在通过ajax或者src动态获取js.css文件的时候,我们常常需要判断文件是否加载完成,以便进行进一步的操作,但是在检测js.css文件是否已经加载的策略上各浏览器并不统一,有很多坑,现在在这里总结 ...
- 【BZOJ】【1018】【SHOI2008】堵塞的交通traffic
线段树 这题的线段树+分类讨论蛮神奇的……我以前学的线段树简直就是渣渣QAQ 看了下ydc题解里的思想>_>用线段树维护连通性!那么就自己写吧……每个节点表示一段区间的连通性(我的叶子节点 ...
- 重启nginx后丢失nginx.pid解决
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- Properties的用法
/** * Description:Properties是HashTable的子類,其存儲形式鍵值對. */ import java.util.*; public class PropertysTes ...
- iOS第三方语音-讯飞语音
官方网站:http://www.xfyun.cn/ 注册还要绑定微信,坑啊,识别率感觉没得微信语音好,但是微信语音审核一直不过,研究下这个 1.下载sdk,主要就下面几个文件,我主要用的是语音识别
- POJ 2092
#include <iostream> #include <algorithm> #define MAXN 10005 using namespace std; int _m[ ...
- POJ 2039
#include<iostream> #include<stdio.h> #include<string> #define MAXN 20 using namesp ...