请问SQL SERVER2005分区表怎么用最有效果

时间:2022-01-24 00:38:21
请问SQL SERVER2005表分区怎么用最有效果?

我的意思是当数据量大时,需要使用到表分区时,

是用多个文件组,多个文件,以及让它们对应多个磁盘分区,这样效果才好

还是用多个文件组,多个文件,对应一个分区上的不同文件夹,这样是否就起不到作用

或者是多个文件组,多个文件,对应一个磁盘阵列上的多个分区?

使用多个文件跟一个文件,多个文件组跟一个文件组在实现的效果上有无区别?

一般来说,在数据量到多大时,最好使用表分区?

表分区比较适合多大的数据量下使用?

目前,SQL SERVER2005的表分区应用得多不多?效果怎么样.



9 个解决方案

#1


此外,如果有几个大表,是不是不同的表使用不同的表空间,性能更好?

#2


数据量多大用表分区不好说,但是文件的放置最好是分散在各个磁盘上,各个分区上,尤其是数据文件和日志文件不能放一个分区或者磁盘.

#3


谢谢.

假设我有几张大表,那么需要
1,把数据文件和日志文件分区存放
2,需要把数据表和索引分区存放
3,需要把不同的大表分区存放
4,需要把每个大表按分区策略分区存放
5,同时需要使用磁盘阵列,多CPU


以上哪几个措施对性能的影响更大?
还有哪些可以考虑提升的空间啊.

#4


个人认为以上都是设计优化的一部分 但对于目前的高速Raid阵列来说 对性能的提升或者都看不出来 如果表超过百万以上 DPV会明显一些

#5


几天前就看到这个帖子了,好像没有很多人感兴趣啊。

SQL2005开始有大表分区的功能。简单的说就是把数据切分成多个部分,然后分布到不同的物理位置上。
两种切法:纵向切和横向切。

纵向切的例子是,你有个大表,里面有5年的数据,每年200万条记录,合计1000万条记录,而且每年数据都增加。那么你按年份把大表切成5段,每年一段。这是备份历史数据的好方法。每年的数据放一个段上,新的一年到了,增加一个段到表上,当年数据都写到这个段上。然后把5年前的一个段从表上卸载,保存。以后有用时可以再装回来。

上面的过程说的简单,但是增加和卸载一个段的过程还是比较令人头大的。最好是写成脚本。而且必须修改一个映射函数,保证数据被写到指定的段上。这种方法虽然麻烦,但是比传统的方法(把数据移动到历史表)还是有优点的,尤其是你的表里面数据太多(例如几个G的历史数据),导致移动数据都很慢的时候,甚至不可能的时候。这种方法的优越性就出来了。

横向切的例子是,你的大表是用来做查询的,当然是越快越好。你有4个硬盘,然后你就把数据通过映射函数分布到4个硬盘上,比如按时间切割,每天有6个小时的数据在一个硬盘上。看上去是不错,也的确会快很多。但是存在单点故障,只要任何一个硬盘挂了,你的麻烦就来了。横向切的用法其实就是很原始的磁盘阵列的用法。

如果你很多要速度和可用性的话,还是用RAID吧,RAID5和RAID10(很贵)都比横向切割好得多。

总得来说,大表分区的功能要谨慎使用。我个人觉得横向分布数据不好,很危险,最好用RAID。对于历史数据用纵向分布的方法比较好。

----------------------------------

至于性能嘛,当然是磁盘越多,CPU和内存越多越好,用RAID肯定比一个硬盘快且安全。
另外,你的分区要在不同的物理硬盘上才有意义。如果在一个硬盘的多个逻辑分区上玩表分区就是练练手而已,不会快的。

#6


假设我有几张大表,那么需要 
1,把数据文件和日志文件分区存放 
2,需要把数据表和索引分区存放 
3,需要把不同的大表分区存放 
4,需要把每个大表按分区策略分区存放 
5,同时需要使用磁盘阵列,多CPU 


以上哪几个措施对性能的影响更大? 
还有哪些可以考虑提升的空间啊.

----------------------------------------
影响性能的因素按重要程度划分如下:
磁盘I/O速度和带宽 >  CPU速度和个数 > 内存速度和大小 > 用户连接数 > 网络速度和带宽 > SQL参数设置

软的方面就多了,比较重要的几个方面按重要程度划分如下:
Database设计 > SQL代码的质量 > 索引的有效性 > 统计数据的有效性

#7


0_0

晕,发现楼主的问题是没分的,我晕倒....

呵呵,无所谓啦

#8


3Q.

可能权限不够,点加分提示不能使用此功能:)

对于分区我也担心数据的安全性,
同时更想知道分区的粒度如何设置才好.
如果要根据几个列分区,
还只能增加一列,把表达式的值写入此列,
然后再按此列进行分区

#9


接分是王道!

#1


此外,如果有几个大表,是不是不同的表使用不同的表空间,性能更好?

#2


数据量多大用表分区不好说,但是文件的放置最好是分散在各个磁盘上,各个分区上,尤其是数据文件和日志文件不能放一个分区或者磁盘.

#3


谢谢.

假设我有几张大表,那么需要
1,把数据文件和日志文件分区存放
2,需要把数据表和索引分区存放
3,需要把不同的大表分区存放
4,需要把每个大表按分区策略分区存放
5,同时需要使用磁盘阵列,多CPU


以上哪几个措施对性能的影响更大?
还有哪些可以考虑提升的空间啊.

#4


个人认为以上都是设计优化的一部分 但对于目前的高速Raid阵列来说 对性能的提升或者都看不出来 如果表超过百万以上 DPV会明显一些

#5


几天前就看到这个帖子了,好像没有很多人感兴趣啊。

SQL2005开始有大表分区的功能。简单的说就是把数据切分成多个部分,然后分布到不同的物理位置上。
两种切法:纵向切和横向切。

纵向切的例子是,你有个大表,里面有5年的数据,每年200万条记录,合计1000万条记录,而且每年数据都增加。那么你按年份把大表切成5段,每年一段。这是备份历史数据的好方法。每年的数据放一个段上,新的一年到了,增加一个段到表上,当年数据都写到这个段上。然后把5年前的一个段从表上卸载,保存。以后有用时可以再装回来。

上面的过程说的简单,但是增加和卸载一个段的过程还是比较令人头大的。最好是写成脚本。而且必须修改一个映射函数,保证数据被写到指定的段上。这种方法虽然麻烦,但是比传统的方法(把数据移动到历史表)还是有优点的,尤其是你的表里面数据太多(例如几个G的历史数据),导致移动数据都很慢的时候,甚至不可能的时候。这种方法的优越性就出来了。

横向切的例子是,你的大表是用来做查询的,当然是越快越好。你有4个硬盘,然后你就把数据通过映射函数分布到4个硬盘上,比如按时间切割,每天有6个小时的数据在一个硬盘上。看上去是不错,也的确会快很多。但是存在单点故障,只要任何一个硬盘挂了,你的麻烦就来了。横向切的用法其实就是很原始的磁盘阵列的用法。

如果你很多要速度和可用性的话,还是用RAID吧,RAID5和RAID10(很贵)都比横向切割好得多。

总得来说,大表分区的功能要谨慎使用。我个人觉得横向分布数据不好,很危险,最好用RAID。对于历史数据用纵向分布的方法比较好。

----------------------------------

至于性能嘛,当然是磁盘越多,CPU和内存越多越好,用RAID肯定比一个硬盘快且安全。
另外,你的分区要在不同的物理硬盘上才有意义。如果在一个硬盘的多个逻辑分区上玩表分区就是练练手而已,不会快的。

#6


假设我有几张大表,那么需要 
1,把数据文件和日志文件分区存放 
2,需要把数据表和索引分区存放 
3,需要把不同的大表分区存放 
4,需要把每个大表按分区策略分区存放 
5,同时需要使用磁盘阵列,多CPU 


以上哪几个措施对性能的影响更大? 
还有哪些可以考虑提升的空间啊.

----------------------------------------
影响性能的因素按重要程度划分如下:
磁盘I/O速度和带宽 >  CPU速度和个数 > 内存速度和大小 > 用户连接数 > 网络速度和带宽 > SQL参数设置

软的方面就多了,比较重要的几个方面按重要程度划分如下:
Database设计 > SQL代码的质量 > 索引的有效性 > 统计数据的有效性

#7


0_0

晕,发现楼主的问题是没分的,我晕倒....

呵呵,无所谓啦

#8


3Q.

可能权限不够,点加分提示不能使用此功能:)

对于分区我也担心数据的安全性,
同时更想知道分区的粒度如何设置才好.
如果要根据几个列分区,
还只能增加一列,把表达式的值写入此列,
然后再按此列进行分区

#9


接分是王道!