SSIS SSAS 的优化手段总结

关于SSIS的优化, 可以参考下面这两篇文章:

http://www.cnblogs.com/ljhdo/p/5477357.html

http://www.cnblogs.com/biwork/p/3330115.html

在Data Flow控件中有很多组件, 有些组件是完全阻塞型的,比如Sort,Aggregate,必须把数据源所有的数据全部load完才能进行排序或者聚合, 另一些组件是半阻塞的,比如Source组件, 可能会load 1000行数据, 然后再一次性输出. 另一些组件比如派生列,多播就是非阻塞型的组件.对于这些可能阻塞的组件要当心, 因为SSIS的处理机制是把数据缓存在内存中,当内存的容量不够大时, 数据会放到硬盘上去, 硬盘的IO速度很差. 所以优化的手段之一就是适当的把这些阻塞型组件的任务交给T-SQL的存储过程.

配置数据流的EngineThreads属性, 合适的线程数=数据源的数目+执行树的数目

关于执行树的概念其实就是那些会阻塞数据流的转换,每个这样的转换都会有一棵对应的执行数, 让一个单独的线程去处理这样的转换,能最大程度的利用起系统的资源, 具体参考:点击打开链接

在插入数据前删除表的索引, 在插入后重建索引.


关于SSAS的优化, 参考:

http://www.cnblogs.com/aspnetx/archive/2013/03/16/2962404.html

https://msdn.microsoft.com/zh-CN/library/hh230823.aspx

分区partition:

在SSAS中,每个度量值组(来自同一事实表的Measures)都会在物理存储上有一个单独的分区. 有时候数据量太大, 为了可以对某个分区进行单独的process, 同时也让query时读取的范围小一点,可以对数据再一次基于其他维度进行分区(比如时间维度). 分区的指定是在SSAS的项目工程文件里用sql query来指定的,比如:

select * from fact where year =2009
有时甚至可以使用SSIS的scripts components来动态添加分区.


非重复计数的度量值:

简单来说就是一个measure的计算方式等同于这句sql query:

select count(*) from table group by somecolumn
要计算这样的度量值需要对全表进行扫描而不是像其他度量值那样查询特定的某几行。所以对这种度量值的优化很有必要。一个策略是在源表上对这里的“somecolumn”建立索引,另一个策略是如果这列是数字类型的,也可以基于这列建立分区。


预聚合:

http://www.cnblogs.com/OpenCoder/p/5154450.html

https://blog.csdn.net/downmoon/article/details/6531207

在SSAS的开发界面的aggregation标签页里可以配置,让SSAS预先在process的过程中计算好一些度量值在某些维度上的聚合值,这种优化手段叫预聚合。在这个标签页的Advanced界面里还可以看到aggregation和dimension的具体关联,一个个不同预先计算好的aggregation会在列上被叫做A0,A1,A2....


增量process:

Process Incremental参考下面的文章:

http://www.cnblogs.com/aspnetx/archive/2009/09/24/1573513.html

Process partition的概念可以参考上面的分区的概念.


Scope

http://www.cnblogs.com/chunshen/p/5158221.html

https://msdn.microsoft.com/zh-cn/library/ms145989.aspx

http://www.cnblogs.com/lizardbi/p/6526899.html

Scope可以在查询前缩小查询范围, 也可以对Cube中特定部分的数据自定义处理.

比如写一句, 让度量值A,在2015的数据, 永远等于它2014年同期的数据的两倍:

Scope   
 (   
    [Date].[Fiscal Year].&[2015],  
    [Date].[Fiscal].[Fiscal Month].Members,  
    [Measures].[A]  
 ) ;     
  
   This = ParallelPeriod                               
          (   
             [Date].[Fiscal].[Fiscal Year], 1,  
             [Date].[Fiscal].CurrentMember   
          ) * 2 ;  



T-SQL优化:
查询计划, 索引统计信息,参考

http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html

英文名: Query Plan, 查询计划基于表的统计信息:

update statistics Tablename
上面这 句可以更新查询信息.

posted @ 2017-04-22 21:57  爱知菜  阅读(56)  评论(0编辑  收藏  举报