Partition--分区总结

 

1. 在SQL SERVER 2008 R2 SP2之前版本,对分区只支持到1000个分区,之后版本支持到15000个分区。
2. 分区索引对齐并不要求索引和表使用同一分区方案,但要求两者使用的分区方案本质相同,即:
        1) 分区函数的参数具有相同的数据类型;
        2) 分区函数定义了相同数目的分区;
        3) 分区函数为分区定义了相同的边界值。

3. 分区合并:合并边界值所在的分区被删除,然后向邻近的分区合并。
4. 查看指定值所属分区:SELECT $PARTITION.partitionFunctionName('express')
5. 查询指定分区的数据:
    SELECT * FROM [dbo].[TB1]
    WHERE $PARTITION.pf_Test(PID)=$PARTITION.pf_Test(2155)
6. 将非分区表装换成分区表:删除聚簇索引,新建聚簇索引并指定分区键和分区函数,重建非聚簇索引。

7. 对不在同一文件组的两个分区进行合并,需要考虑合并照成的IO影响,对处于同一个文件组的两个分区合并,不会造成过多IO影响。
8. 合并分区:ALTER PARTITION FUNCTION patitionFunctionName() MERGE RANGE(rangeValue)
9. 拆分分区:
    1)指定新分区使用文件组:
            ALTER PARTITION SCHEME partitionSchemaName 
            NEXT USED fileGroupName;
    2)修改边界值:

            ALTER PARTITION FUNCTION  partitionFunctionName  ()  
            SPLIT RANGE (rangeValue)
10. 可以对两个相邻的分区进行合并,如果两个分区都不为空,那么合并可能耗费大量时间和资源。
12. 在内存低于16GB的服务器上,不推荐使用超过1000的分区
13. 在分区表上创建非聚集非对齐索引时,会同时对所有分区上创建排序表,因此需要使用大量内存,当内存不足时,创建失败。
14. 在分区表上创建非聚集对齐索引时,会依次在每个分区上创建排序表,由于创建排序表过程是串行执行,因此不会使用大量内存从而使性能下降。
15. 当内存有压力时,如需要在分区数较大的分区表上建立非聚集非对齐索引时,可修改最大并行度为较小值来降低创建索引的内存使用。
16. 在使用分区表时,应该检查和修改分区表的锁升级

  

--====================================
--查看表的锁升级设置
SELECT 
TB.name AS TableName,
TB.[lock_escalation],
TB.[lock_escalation_desc]
FROM sys.tables TB
WHERE TB.name='TB1'

--==================================
--将表的锁升级设置为AUTO
ALTER TABLE [dbo].[TB1] SET (LOCK_ESCALATION = AUTO )

 

 

优点:

1. 分区可以使得单个分区表或分区索引中数据大大减少,从而提高查询和索引重建和整理的速度。

2. 将数据合理分散到多个分区后,可以有效解决数据热点问题。

3. 表分区和索引分区使用同一个分区函数时,可以快速地换出和换出某个分区的数据,在清理历史数据时很有效。

4. 当有多组磁盘时,可以使用分区将磁盘压力分散到多组磁盘上,来提高磁盘使用率。

 

缺点:

1. 当查询需要跨越多个分区时,可能会造成逻辑读取较高,对多个分区数据合并可能会导致CPU过高(SORT MERGE OR HASH MERGE)

2. 在分区表上建立唯一索引时,如唯一索引也使用相同分区函数,则有利于将数据按区迁出和迁入,但唯一索引必须附带分区键,会影响对整表求MAX/MIN等操作的效率

你可能感兴趣的:(partition)