数据库情况
  使用SQL2005,在数据库里有多张表是以每天万条级的数量增加,最多可能达到每天达十万条级。
分区情况
  数据库里大数量组的表采用分区,以表里的日期进行按月分区,每个月的数据为一个区,每年的数据(十二个区)为一个数据文件(.mdf),并且为一个文件组。测试结果
  在自个的笔记本电脑上测试千万级数据,分区的查询性能差。疑问
  从网上了解到,每一个分区创建一个MDF文件,并且为一个文件组文件,放在不同的磁盘上。现在磁盘少则80G,如果数据文件MDF没有那么大,不是很浪费吗?如果按月分区,那该需要多少块磁盘?如果按年分区,能否提高查询的性能?像这样的大量的数据应该怎么分区?

解决方案 »

  1.   

    1.数据表的栏位有多少?每天按照10W的数据量计算的话,大概有多少MB.
    2.关于分区,没有做RAID的分区效果不明显,所以你的测试方案是失败了的.
    3.可以按照年来分区.
      

  2.   

    1、数据表的栏位是什么意思?每天10W数据量能增加多少MB没有算过。
    2、采用SQL2005分区,应该使用RAID的那个级?在问一下,做了RAID后,每个磁盘应该分多大空间,是不是按照有多少块磁盘,就分多少个硬盘分区。如果把一块磁盘分成了两个或多个硬盘分区,怎么保证单个文件组放入不同的磁盘?
    3、按照年来分区是不是每个分区的数量有点多啊?
      

  3.   

    1.就是你这个表中一行的总长度。
    2.哪个RAID应该根据你的需求来实现,一般RAID 5 即可。
    3.不同的文件组放于不同的磁盘即可。可以每个分区创建一个文件组,一个文件组内包含多个ndf文件。
    可参照:http://msdn.microsoft.com/zh-cn/library/ms345146%28SQL.90%29.aspx
      

  4.   

    根据一行记录的大小(每列加起来,比如就两列(int,char(100))=4+100=104 byte,10W行=10W*104/1024/1024=10M, 个人感觉分区时一个文件控制在500~800M比如合适(一个文件组可以包含几个文件),不过应该根据硬盘规格,机器配置来具体确定了
      

  5.   

    按照月来分区数据量较小,分的粒度比较细,逻辑文件和物理文件较多,不好管理,容易产生碎片.
    按照年来分,通常情况下,不是超大型或者大型的OLAP或者海量数据采集等应用的话,一般的企业应用,按照年来分应该应该不会有大的问题.所以要先确定你的数据量,然后在看哪种方式来分区比较好.
    不仅仅有以时间来分区,还可以按照记录ID来分区等等方式.
      

  6.   

    谢谢各位的回复了。现有项目的数据库分区方案是按月分区的,由于已经接近年底,需要重新修改分区方案和分区函数,综合回复的情况,当前打算按照年来分区,每年创建一个ndf文件,并且属于一个文件组;以后随着业务数据量的增加再考虑修改分区方案到半年一个ndf文件或分区方案时间再短点。
      

  7.   

    在这方面还有一些关于硬盘阵列的疑问:
    1、数据库分区与服务器的raid有没有必然的联系?
    2、采用SQL2005分区,应该使用RAID的那个级?
    3、做了RAID后,硬盘是不是可以随意设置硬盘分区大小?相对于数据库的mdf或ndf文件怎么放入硬盘分区里?是一个硬盘分区放一个ndf文件,还是可以放好几个ndf文件?