SQLServer索引创建策略——第2部分:离线、并行、非分区
SQLServer索引创建策略——第2部分:离线、并行、非分区--王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
--原帖地址
在SQLServer里创建并行索引计划的类型依赖于是否有可用的柱状图提供必要的统计。因此,有两种明显的并行索引计划类型:有可用的柱状图(并行排序和创建): X (交换) | \ \ 创建器…创建器…创建器… (写数据到要创建的索引里) | | | 排序… 排序… 排序… (根据索引键排序) | / / 扫描(从源里读取数据)
当有可用的统计时会选择这个类型的并行索引去创建(因此并列的分区信息可用且能用于标识数据的分布)。这种情形扫描是怎样执行的呢?在第一个键列上必须有一些统计,如果没有的话,将先进行抽样统计以决定是否和怎样执行索引并行创建操作。然而,在某些情形下不能创建抽样统计,如索引视图(没有统计计划),这时会产生不同的索引创建计划。使用统计和柱状图能标识数据的分布(把数据分成几块),所以可以在并行计划的工作之间负载均衡工作量,也有助于使DOP(并行度)决定去获取高的系统资源利用率。使用柱状图的估计行计数,对于分布里的每一块,工作量分成N块(N=DOP),每个工作一块(这是试图在多个工作之间进行负载均衡)。使用范围分区扫描去扫描数据,每个工作接收的数据属于它自己的范围并创建自己的排序表和基于排序表的二叉树,所以每个工作都有自己的排序表并且所有的二叉树都是独立的。然后协调线程在索引创建操作的最后将把所有的二叉树联合在一起,从而在一个新的二叉树上创建一个完整的统计。有可用柱状图的并行索引的创建能提供最好的性能。缺点是要消耗更多的内存,如果没有足够的内存的话会创建失败(因为每个工作创建DOP个排序表)。可以用MAXDOP选项去减少用于索引创建的DOP的最大数量,这样,可以最小化创建需要的内存。你可以运行sp_configure去配置服务器的max degree of parallelism(最大并行度)的缺省值。最大并行度等于0意味着根据目前系统的工作量使用实际可用的CPU数量。你可以在并行计划执行里明确限制使用处理器的数量。例如:Create index idx_t on t(c1, c2)WITH (MAXDOP = 2)--限制用来创建索引的处理器数量为2
上一篇:SQLServer索引创建策略——第1部分:离线、连续、非分区下一篇:SQLServer索引创建策略——第2部分:离线、并行、非分区(无统计计划(无柱状图))

拓狼 最后编辑于 2007-05-25 13:49:32
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。