高性能网站建设之 MS Sql Server数据库分区

news/2024/7/3 13:27:50 标签: sql server, 数据库, 磁盘, 报表, io
 

什么是数据库分区?
数据库分区是一种对表的横向分割,Sql server 2005企业版和之后的Sql server版本才提供这种技术,这种对表的横向分割不同于2000中的表分割,它对访问用户是透明的,用户并不会感觉的表被横向分割了。(2000中的表横向分割是建n个表例如按时间建表每月一个表,表名不同,最后需要做一个大视图)

关于具体的如何做分区,请参考数据库分区演练http://www.cnblogs.com/yukaizhao/archive/2008/05/07/sql_partition_test.html

为什么要分区?
显而易见分区是为了提高数据库的读写性能,提高数据库的效率;

分区是否总是可以提高效率?
分区是一把双刃剑,并不总能提高效率,这和具体情况有关系。
之所以有分区技术,分区技术用的好的话可以提高性能,是因为一方面分区把一大块数据分成了n小块,这样查询的时候很快定位到某一小块上,在小块中寻址要快很多;另一方面CPU比磁盘IO快很多倍,而硬件上又有多个磁盘,或者是RAID(廉价磁盘冗余阵列),可以让数据库驱动CPU同时去读写不同的磁盘,这样才有可能可以提高效率。
分区在有些时候并不能提高读写效率,比如说我们经常看到的按照日期字段去分区MSDN例子,这个实例中是按照记录的生成时间来分区的,把一年的数据分割成12个分区,每月一个。这样的分区导致分区并不能实现CPU同步写并提高写入性能,因为在同一个时段CPU总是要写入到最新的那一个分区对应的磁盘中。另一个问题是:这样分区是否可以提高读取性能呢?答案是不一定,要看根据什么字段来查询,如果是根据时间来查询,根据时间生成报表那么这种分区肯定会提高查询的效率,但是如果是按照某个客户查询客户最近1年内的账单数据,这样数据分布到不同的分区上,这样的话效率就不一定能提高了,这要看数据在同一个分区上连续分布的读性能高,还是CPU从几个磁盘上同步读取,然后在合并数据的性能更高一些,这和读取数据的记录数也有关系。

如何分区?用什么字段做分区依据?
具体如何分区和涉及的业务有关系,要看业务上最经常的写入和读取操作是什么,然后再考虑分区的策略。

既然与具体业务相关,我们就假定一个业务环境,假如我们要做一个论坛,对论坛的帖子和回复表进行分区。
论坛中最常见的写操作是1)发帖 2)回复帖子,
最常见的读操作是
1) 根据帖子id显示帖子详情和分页的帖子回复
2) 根据帖子版面帖子列表页根据版面id分页读取帖子列表数据
怎么分区更合适呢?现在还没有准确答案,我有两种可能的方案,写下来,大家讨论看看。
方案1. 根据帖子ID区域段分区(1-300w一个分区、300w-600w一个分区…),这样理论上可以提高帖子详细页的读取速度,而对于写操作性能没有益处,对于根据版面id读取帖子列表页有可能有益
方案2. 根据版面id进行分区,这样对于写性能应该有提高,不同的分区对应不同的版面,当有两个版面同时有发帖回帖操作时,有可能可以并发写。对于根据版面id获得帖子列表页数据也可以提高性能,而对于帖子详细信息页没有性能影响。

多大的数据量才需要分区?
这个问题我只能说一个内部标准,如果一张表的记录超过在超过1000w,并以每月百万的数据量增长,那就需要分区。大家有不同的看法请回复讨论

关于具体的如何做分区,请参考数据库分区演练http://www.cnblogs.com/yukaizhao/archive/2008/05/07/sql_partition_test.html

请尊重作者的劳动,转载请保留链接 玉开的技术博客      


http://www.niftyadmin.cn/n/1425544.html

相关文章

shell常见的语句结构

一.if语句结构 1.单分支的if语句if 条件测试操作then命令序列fi2.双分支的if语句if 条件测试操作then命令序列1else 命令序列2fi3.多分支的if语句if 条件测试操作1then命令序列1elif 条件测试操作2then 命令序列2else 命令序列3fi二.for循环语句for语句的结构for 变量名…

Sql Server 分区演练

代码加注释,希望对初学者有用。 USE[master]GOifexists(select*fromsys.databases wherename Test_1)dropdatabaseTest_1GO--创建新库,要演练分区所以我们会多创建两个文件组Test_A,Test_B,以便在后面的分区方案中使用。CREATEDATABASE[Test_…

二层网络,三层网络

在企业的网络结构选择中,有二层网络和三层网络结构两种选择。 在这里的二层、三层是按照逻辑拓扑结构进行的分类,并不是说ISO七层模型中的数据链路层和网络层,而是指核心层,汇聚层和接入层,这三层都部署的就是三层网络…

T-SQL语句 运算符

T-SQL语言主要由以下几部分组成: DML(Data Manipulation Lauguage,数据操纵语言):用来查询,插入,删除和修改数据库中的数据,如select,insert,update&#xf…

VLAN tag

这四个字节的802.1Q标签头包含了2个字节的标签协议标识(TPID)和2个字节的标签控制信息(TCI)。 TPID(Tag Protocol Identifier)是IEEE定义的新的类型,表明这是一个加了802.1Q标签的帧。TPID包含…

海量数据表的处理方法

分区的方式有水平分区和垂直分区两中。 前者不拆分表结构,只拆分数据;后者拆分表结构,即将某些字段划到其他表中。 当我查询海量数据表时,访问速度特别的慢。朋友建议我两种方案:1、采用每天建个表的机制&#xff0…

通过一个实例来理解路由与路由表

应用背景 下图共有两个不同的网段分别是NetworkA与NetworkB,这两个网段是通过一个路由器(Server A)来进行数据传递,那么当PC01这台主机想要传送数据到PC11时,它的IP数据包该如何传输? 应用分析 NetworkA&…

IP地址的ABC类划分

简单的说: A类网络的IP地址范围为:1.0.0.1-126.255.255.254; B类网络的IP地址范围为:128.1.0.1-191.255.255.254; C类网络的IP地址范围为:192.0.1.1-223.255.255…