Resource Governor
SQL Server 2008中新的Resource Governor可以控制分配给关系型数据库中不同部分的工作负载的CPU和内存资源的数量。它可以用来防止失控查询(阻止资源分配给其它工作负载的查询)以及为你的工作负载的重要部分预留资源。SQL Server 2005资源分配策略平等对待所有的工作负载,并按需分配共享资源(例如CPU带宽、内存)。这有时会引起资源分配不按比例,从而导致性能不均衡或意料外的速度降低。
Resource Governor 的主要目的如下:
监控:监控每组请求的资源消耗(工作负载分组)。
可预测性:能够对存在资源竞争的环境中预测工作负载的执行。这是通过明确制定工作负载间的资源边界来完成的(通过资源池控制)。资源边界的使用还能防止或降低查询失控的可能性。Resource Governor所提供的监控能力更容易发现失控查询。
优先级:可以设置工作负载优先级。
要理解资源监控器,有三个新的概念是很重要的:工作负载分组、资源池、分类(以及用户定义的分类器函数)。
组:一个工作负载组(workload group),或组(group),是一个用户指定的请求分类,它与应用于每一个请求的分类规则类似。组的值存在于资源消耗聚合监控和一个用于组内所有请求的统一策略中。组为其成员定义了策略。
池:一个资源池(resource pool),或池(pool),它显示了服务器一部分物理资源。根据它的设置,池可以有固定大小(其最大资源使用和最小资源使用设置是相等的)或者在多个池之间共享一部分(它的最小值小于它可用的最大值 )。在这种情形下,“共享”只是意味着资源提供给最先请求资源的池。在默认配置下,所有的资源都是共享的,从而保证了对SQL Server 2005的兼容性。
分类:分类(Classification)是一组用户编写的规则,使得Resource Governor可以将请求分类到前面所介绍的组里面。它是通过一个分级的Transact-SQL用户定义函数(UDF)来执行的,UDF旨在作为Resource Governor的一个“分类器UDF”。
下图对这些概念进行了描述。
使用Resource Governor 不一定需要更改应用程序。
集成服务的改进
采用ETL将数据从操作系统中移到数据仓库中是一个很耗时的工作。为了使这个过程更快,SQL Server 2008 Integration Services (SSIS) 推出了两个重要的可扩展功能:改进的Lookup性能和改进的转换管道性能。
Lookup 性能
在SSIS中的Lookup 组件运行得更快,并且比在SQL Server 2005中更容易编程。lookup可以测试在记录流里每一行记录是否在另一个数据集中也有一个相匹配的记录。一个lookup就像一个数据库联接操作。一般情况下在整合过程中会使用lookup,例如从源系
统中生成数据仓库的ETL层。
Lookup将建立用于保存从探测数据集获得记录的缓存。在SQL Server 2005中,Lookup组件只能从特定的OleDb连接里获得数据,而且缓存内容只能使用一个SQL查询来获得。在SQL Server 2008中,新版本的Lookup可以使用在同一个包或不同包里的单独管道来生成缓存的内容。你可以从几乎任何地方使用源数据。
SQL Server 2005在每次使用缓存的时候将它重新加载。例如,如果在同一个包里面有两个管道,每一个都要求相同的参考数据集,那么每个Lookup组件将缓存自己的副本。在SQL Server 2008中,你可以将这个缓存保存到虚拟内存或文件中存储。这意味着在相同的包里面,多个Lookup组件可以共享相同的缓存。你可以将这个缓存保存到一个文件并与其它包共享。这个缓存文件格式为了加快速度进行了优化,并且对它的访问比从原始关系型数据源重新加载这个参考数据集要快几个数量级。
在SQL Server 2008中,Lookup组件推出了不匹配缓存(miss-cache)功能。当这个组件配置为直接对数据库进行查找时,不匹配缓存功能通过有选择性的将参考数据集中的不匹配入口键值加载进缓存从而节省时间。例如,如果这个组件从进来的管道得到值123,但是Lookup组件已经知道在参考数据集里没有匹配入口,这个组件将不会再在参考数据集里查找123。这样就避免了在数据库中进行一次多余而又耗资源的查询。这种不匹配缓存特性在某些场合下可以将性能提高40%。
其它对Lookup组件的改进之处包括:
优化I/O路径使得缓存加载和查找操作更快速。
更直接的用户界面,简化了Lookup组件的配置,特别是缓存选项的配置。
至少同参考数据集中的一个入口不匹配的记录会被发送到不匹配输出。错误输出只处理错误,例如截断。
在查找转换中的查询语句可以在运行时做更改,使得编程转换更加灵活。
改进信息和错误消息来帮助故障排除和性能分析。
数据流1从一个定制源组装了一个缓存连接管理器(Cache Connection Manager,CCM),然后数据流2使用相同的CCM来组装lookup的缓存。这个图片还显示了Lookup组件3个输出的各自用途。
管道性能
在SQL Server 2005 SSIS中要求一个单独线程自己进行的工作,在SQL Server 2008 SSIS 中可以用几个线程一起协作进行。这使你的ETL性能可以提高几倍。
在SQL Server 2005 SSIS 中,管道并行是非常粗糙的。当用户有一个简单的包,其中具有一个或两个执行树时,只会使用一个或两个处理器,并且这个包可能不会获益于具有多个处理器的计算机。即便是用户使用多点传送将数据流逻辑上分割,一个多点传送的所有输出路径页也属于同一个执行树,并且它们由SQL Server 2005 SSIS数据流任务连续执行。
为了获得高级别的并行,在SQL Server 2008 SSIS 中的管道允许更多的并行处理,这意味着使用多处理器计算机可以获得更高的性能。
通过使用一个共享线程池,多点传送的多个输出可以同时执行。简而言之,这个多点传送可以在每一个输出上具有一个可用缓冲,并且不只有一个用于传递给每一个输出的缓冲(还有一个可用线程。你不需要使用“Union All”来实现更多的并行。
例如,假设你有一个包含具有四个输出的多点传送数据流。每一个输出都流入一个聚合里。在SQL Server 2005 SSIS 中,同一时间只处理一个聚合。在SQL Server 2008 SSIS 中,这四个聚合可以并行处理。
SQL Server 2008数据仓库可扩展性
0
相关文章