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)的更多相关文章

  1. SSIS实践入门2:批量包的调度和SQLServer代理作业配置

    趁着上一篇文章的余温,我们继续研究一下SSIS中多个包如何调度,难道需要一个包一个包的配置调度程序吗?显然不是的,接下来我们就说一说在SSIS应用中如何批量的调度所有的作业,本文只讲述一个基本的逻辑过 ...

  2. 解决Sublime包管理package control 报错 There are no packages available for installation

    解决Sublime包管理package control 报错 There are no packages available for installation 真的是哔了狗了,要不是我机智的重新安装了 ...

  3. 08. Go 语言包(package)

    Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...

  4. [UML]UML系列——包图Package

    系列文章 [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列——类图Class   ...

  5. JAVA获取apk包的package和launchable-activity名称(一)

    背景: 每次要获取apk包的package和launchable-activity名称都需要运行doc命令,感觉好浪费感情,因为经常记不住常常的路径,但又不想把aapt设置为环境变量 我这个工具分几步 ...

  6. 查看Android应用包名package和入口activity名称

    使用android自动化测试工具启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用aapt    //aa ...

  7. 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)

    ---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...

  8. Android开发之查看应用包名package和入口activity名称的方法

    使用android自动化测试工具monkeyrunner启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用 ...

  9. 包图Package

    [UML]UML系列——包图Package 系列文章 [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       ...

随机推荐

  1. js毫秒数转换成时间格式

    Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + ...

  2. Bootstrap入门二:响应式页面布局

    Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin 用于生成更具 ...

  3. Node.js 项目搭建

    关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识.本书绝不是一本“Hello World”的教程. 状态 你正在阅读的已经是本书的最终版. ...

  4. MySQL - 定时备份

    创建备份目录,在这里以/root/bak/mysql为例: cd mkdir bak cd bak mkdir mysql 在/usr/sbin下touch一个sh: cd /usr/sbin tou ...

  5. 关于java.lang.OutOfMemoryError: Java heap space的错误分析

    今天无意间遇到这个错误:java.lang.OutOfMemoryError: Java heap space 问题出现原因:使用a标签实现快速下载[当然已经实现了,但想了想还是要归纳解决这类问题] ...

  6. Servlet主要的作用

    1,收集Request传递过来的参数: 2,把这些参数组织成模型需要的类型: 3,调用模型进行逻辑功能处理: 4,选择下一个页面,先准备好一个页面需要的数据,然后转向下一个页面.

  7. 一个包的libevent流程

    //一个发包的流程 第一个包就是客户端的心跳包,现在加了版本的包 再来看看这个发包打包过程,过程坚持,但理解费劲 void NGP::OnliveTimer()//客户端心跳,5s发一次 { Send ...

  8. __cdecl __stdcall __fastcall之函数调用约定讲解

    首先讲解一下栈帧的概念: 从逻辑上讲,栈帧就是一个函数执行的环境:函数参数.函数的局部变量.函数执行完后返回到哪里等等. 实现上有硬件方式和软件方式(有些体系不支持硬件栈) 首先应该明白,栈是从高地址 ...

  9. p3p之讲解

    P3P是一种被称为个人隐私安全平台项目(the Platform for Privacy Preferences)的标准,能够保护在线隐私权,使Internet冲浪者可以选择在浏览网页时,是否被第三方 ...

  10. GIS数据格式topojson

    Topojson源自于GeoJson,是D3中描述地理数据的格式,D3的作者觉得GeoJson太繁琐.同样的数据,TopoJson是GeoJson的1/5. 这里有一个转换TopoJson,GeoJs ...