SSIS 设计系列:

一,数据类型的选择

对于SSIS的数据类型,容易遗漏精度的是DateTime,不正确的使用DateTime,time,decimal 等数据类型,可能导致溢出或数据丢失。

1,变量和参数的时间类型(DateTime)

Variable 和 Parameter的DateTime对应 DT_DBTIMESTAMP (对应SQL Server的Datatime),格式是:yyyy-MM-dd hh:mm:ss XM,例如 “2016-05-19 5:41:32 PM”,只精确到秒。

2,转换组件

由于转换组件不能丢失精度,因此有以下三种方式:DT_DBTIMESTAMP,DT_DBTIMESTAMP,DT_DBTIMESTAMPOFFSET.

  • DT_DBTIMESTAMP 对应 SQL Server的 Datetime,格式是 "yyyy-MM-dd hh:mm:ss",精确到秒
  • DT_DBTIMESTAMP2 对应 SQL Server的 Datetime2(N),有precision,可以精确到ss.nnnnnnn
  • DT_DBTIMESTAMPOFFSET 对应 SQL Server的datetimeoffset(N),有precision,可以精确到ss.nnnnnnn

3,类型转换对性能的影响

只在必要时,进行数据类型的转换,因为每次转换,SSIS Engine都需要付出一定的代价。

如果将值转换为一个不支持的数据类型,那么将会在SSIS内部产生一个到映射数据的额外转换,最好将数据类型转换为与目标最接近的数据类型。

4,数据类型的选择

SSIS的 Data Flow需要在内存中完成大量的工作,消除了最费时的IO操作,使数据的读取,转换和加载性能飞快。由于SSIS使用内存缓存区来完成相关操作,被加载到缓冲区的行数直接和row的宽度相关,row的宽度越窄,缓冲区容纳的行数越多,被处理的数据量越大,性能越好。如果要定义大型输入源的数据类型,必须慎重挑选数据类型,使用最接近的大小和精度存储和转换数据,既能使row的宽度不至于太宽,也能避免过多的数据类型转换。

二,利用数据流

数据流利用内存来缓冲数据,并在内存中处理数据转换,由于内存的访问速度是非常快的,所以SSIS数据流转换性能是非常高效的。SSIS Engine将数据分批加载到内存中,当Data Flow将一批新的数据加载到内存时,下游转换组件会对已经加载到内存中数据进行处理,同时,目的组件会将处理完成的数据加载到Target Table中,数据的读取,转换和加载同时进行,这就是数据流的优势。

1,利用数据流,能够减少暂存和昂贵的disk IO 操作

在大量数据的ETL系统中,Disk IO是系统性能的bottlenect。相比内存 RAM,Disk IO的读取和写入速度非常慢,将内存缓冲区中的数据写入暂存表,再从暂存表中读取数据到内存中,不仅成倍增加了Disk IO,而且限制了数据流的并发处理能力。请记住,使用暂存表的场景是:ETL系统中存在大量数据的更新操作。这是由于Data Flow 没有基于集合的更新转换组件,OLEDB Command 转换组件是逐行对数据进行更新操作,使用暂存表,能够充分利用RDBMS对数据进行基于集合的更新操作的优势。如果ETL系统不存在大量数据的更新操作,请选择使用数据流来处理数据。

2,利用数据流,减少对RDBMS的依赖

使用Data Flow转换组件来联接和清洗数据是十分高效的,这是因为,数据的读取,转换和加载同时进行。RDBMS对数据的处理是原子性的,在数据被处理完成之前,是不能被其他SQL语句处理的,相反,数据流可以并行地处理数据的提取,清洗,联接和写入,因此,充分利用数据流的并发处理优势,会使数据整体的处理时间大幅减少。

3,利用RDBMS处理数据源

在使用Source适配器获取数据时,利用数据库的order by 子句进行排序,将会比Sort 转换更有效率;对于源是多表联接的查询语句,使用RDBMS获取数据将会更快。

三,并发设计

最大的并发程度,是由服务器的CPU数量确定的,在同一时间执行的线程的最大数量是CPU的个数,一个CPU在某一时刻,只有一个Process处于Running状态,所以最大并发度不要超过CPU的个数。

通过以下两个属性控制ETL执行的并发度:

  • MaxConcurrentExecutalbes :Package的属性,用于指定Package中可以并发执行的可执行文件的最大数量;
  • EngineThreads :数据流Task的属性,用以确定数据流Task中各个转换组件同时运行的最大线程数,每一个转换组件最多使用一个Thread

1,利用优先约束来并发处理数据

Data Flow Task 和 Data Flow Task 1 是并发执行的,而 Data Flow Task2 必须等到 Data Flow Task 和 Data Flow Task 1 执行完成之后,才开始执行。

 2,从同一个表中并发获取数据

如何从一个数据表中并发处理数据,设计思路是把一个表中的数据平均分成N份,各个数据流之间并发处理。

例如分为3份,可以使用%3,将数据分为三个子数据流并发处理数据。

select *
from dbo.SourceTable
where checksum(table_column)%3=0 select *
from dbo.SourceTable
where checksum(table_column)%3=1 select *
from dbo.SourceTable
where checksum(table_column)%3=2

Package设计1:选择数据类型、暂存数据和并发的更多相关文章

  1. Package 设计3:数据源的提取和使用暂存

    SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 在使用SSIS Package处理海量数据时, ...

  2. Package设计2:增量更新

    SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 一般来说,ETL实现增量更新的方式有两种,第一 ...

  3. SSIS Design5:使用暂存

    以数据流的方式来设计Package,将核心数据处理移动到数据流中,一般情况下,能够减少临时表的创建,获得较高的处理性能,在某些情况下,使用暂存表(staging table)能够优化package设计 ...

  4. ASP.NET状态管理之四(暂存状态HttpContext.Items)

    ASP.NET提供一个类System.Web.HttpContext ,用来表示上下文,此对象有一个属性Items 暂存状态就是利用HttpContext.Items属性来存放数据 MSDN中Http ...

  5. 【Git】(1)---工作区、暂存区、版本库、远程仓库

    工作区.暂存区.版本库.远程仓库 一.概念 1.四个工作区域 Git本地有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或 ...

  6. Photoshop入门教程(二):暂存盘设置与标尺设置

    新建文档之后大家就可以对图像进行编辑.在对图像进行编辑之前,先来了解一下如何查看图像的一些基本信息.在软件左下角,会有这样的信息显示窗口. 1窗口表示当前图像显示比例,200%代表当前为放大两倍显示. ...

  7. innodb是如何存数据的?yyds

    前言 如果你使用过mysql数据库,对它的存储引擎:innodb,一定不会感到陌生. 众所周知,在mysql8以前,默认的存储引擎是:myslam.但mysql8之后,默认的存储引擎已经变成了:inn ...

  8. Git技法:.gitignore、移除暂存与撤销修改

    1. .gitignore常见项目添加 1.1 .gitignore模板 .gitignore针对每个语言都有对应的模板,在GitHub创建项目时就可以选择(你可以在GitHub提供的.gitigno ...

  9. photoshop:无法完成请求 因为暂存盘已满

    今天photoshop打开一个问题,提醒:无法完成请求因为暂存盘已满 不用担心这个问题很好解决可能是你做的图比较大并不需要清理C盘空间 选择:编辑→首选项→暂存盘 设置第一暂存盘为D盘或E盘 总之 第 ...

随机推荐

  1. url用法

    url中的name用法: 0.定义主rul.py urlpatterns = [ url(r'^sinfors/', include('sinfors.urls', namespace="s ...

  2. Mongo.exe 无法定位程序输入点terminate于动态链接库 *.dll的解决办法

    Win7 或者Winserver 上安装新版的Mongo后,总是提示如上问题,可使用如下方法解决: 一是系统更新到SP1,并安装了KB2999226这个更新包(重要): 二是安装安装 Visual C ...

  3. Substring Search

    查找子字符串 Introduction 在长度为 N 的文本里寻找长度为 M 的模式(子串),典型情况是 N >> M. 这个应用就很广泛啦,在文本中寻找特定的模式(子串)是很常见的需求. ...

  4. c++中堆、栈内存分配

    转自:https://blog.csdn.net/qingtingchen1987/article/details/7698415 一个由C/C++编译程序占用内存分为以下几个部分1.栈区(stack ...

  5. CI(2.2) 配置 jquery的上传插件Uploadify(v3.2) 上传文件

    1.下载uploadify,   我的是v3.2 2.模板页面引入: <base href='{base_url()}' /> <script type="text/jav ...

  6. java内部类案例

    实现键值对的存储输出 import java.util.Arrays; public class EntryDemoTest { //实现键值对的存储 public static void main( ...

  7. ORACLE数据库入门再在屋里坐会

    一.数据库简介 数据库概述 数据库(database)是按照数据结构来组织,存储和管理数据的仓库,它产生与距今五十年前. 简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数 ...

  8. UVa 10214 - Trees in a Wood.(欧拉函数)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. 【洛谷】【二分答案+贪心】P1316 丢瓶盖

    [题目描述:] 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? [ ...

  10. [转]浮动窗体中的OpenGL多视图的实现

    由于在工作中需要结合浮动窗体实现OpenGL的多视图,用于得到三维实体的三视图观察效果,通过参考其它资料,设计了一个程序框架,在此基础之上大家可以根据自己的需要进行扩充,实现需要的功能. 程序实现效果 ...