数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

MS Sql Server数据库分区


发布日期:2020年09月27日
 
MS Sql Server数据库分区

什么是数据库分区?

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

为什么要分区?

显而易见分区是为了提高数据库的读写性能提高数据库的效率

分区是否总是可以提高效率?

分区是一把双刃剑并不总能提高效率这和具体情况有关系

之所以有分区技术分区技术用的好的话可以提高性能是因为一方面分区把一大块数据分成了n小块这样查询的时候很快定位到某一小块上在小块中寻址要快很多另一方面CPU比磁盘IO快很多倍而硬件上又有多个磁盘或者是RAID(廉价磁盘冗余阵列)可以让数据库驱动CPU同时去读写不同的磁盘这样才有可能可以提高效率

分区在有些时候并不能提高读写效率比如说我们经常看到的按照日期字段去分区MSDN例子这个实例中是按照记录的生成时间来分区的把一年的数据分割成个分区每月一个这样的分区导致分区并不能实现CPU同步写并提高写入性能因为在同一个时段CPU总是要写入到最新的那一个分区对应的磁盘中另一个问题是这样分区是否可以提高读取性能呢?答案是不一定要看根据什么字段来查询如果是根据时间来查询根据时间生成报表那么这种分区肯定会提高查询的效率但是如果是按照某个客户查询客户最近年内的账单数据这样数据分布到不同的分区上这样的话效率就不一定能提高了这要看数据在同一个分区上连续分布的读性能高还是CPU从几个磁盘上同步读取然后在合并数据的性能更高一些这和读取数据的记录数也有关系

如何分区?用什么字段做分区依据?

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

既然与具体业务相关我们就假定一个业务环境假如我们要做一个论坛对论坛的帖子和回复表进行分区

论坛中最常见的写操作是)发帖 )回复帖子 最常见的读操作是

) 根据帖子id显示帖子详情和分页的帖子回复

) 根据帖子版面帖子列表页根据版面id分页读取帖子列表数据

怎么分区更合适呢?现在还没有准确答案我有两种可能的方案写下来大家讨论看看

方案 根据帖子ID区域段分区(w一个分区ww一个分区…)这样理论上可以提高帖子详细页的读取速度而对于写操作性能没有益处对于根据版面id读取帖子列表页有可能有益

方案 根据版面id进行分区这样对于写性能应该有提高不同的分区对应不同的版面当有两个版面同时有发帖回帖操作时有可能可以并发写对于根据版面id获得帖子列表页数据也可以提高性能而对于帖子详细信息页没有性能影响

多大的数据量才需要分区?

这个问题我只能说一个内部标准如果一张表的记录超过在超过w并以每月百万的数据量增长那就需要分区

上一篇:几个技巧解析SQL Server群集的难题[1]

下一篇:并行查询让SQL Server加速运行