数据库保存6个月的数据,每个月自动新建下个月的分区和回收6个月以前的分区,每个分区有30G的数据,在每个月改变分区函数的时候会非常慢,在数据量少的情况下没有这个问题,不知道是什么原因?

解决方案 »

  1.   

    如果索引没有对齐分区,或分区不在同一个文件组,而不能用SWITCH方式来移动分区的话,就相当于每一个记录(包括索引),都要扫描一下,用INSERT,DELETE方式来移,所以数据量多,就会慢。具体原理还没测试过。
    #1.如果是堆表,没有任何索引的话,移动分区,也就相当于COPY30G的数据(WINDOWS COPY方式)
    #2.但如果有索引,且没有对齐到分区,系统就要维护索引,而维护索引就要扫描某一分区内所有记录才能正确删除索引,所以会慢。
    楼主需要了解一下,表,索引,分区表,文件组,文件之间的关系,及数据是如何存放在它们上面的。
      

  2.   

    最好将数据跟你要Switch的分区放到一个Filegroup,这样做Switch就直接是元数据的修改不会牵扯到数据的移动。如果不在一个Filegroup就需要移动30GB的文件,所以会花费很多时间。
      

  3.   

    在每个月改变分区函数。一直奇怪ms为什么不支持 无须改变的分区函数无奈之下,一个记录数上亿的子表,只好以 父表id % 100 作为分区函数。
      

  4.   

    MS的分区还是不如Oracle的分区好用。 
      

  5.   

    你可以监控一下系统,在改变分区函数的时候,cpu,io方面有没有什么大的变化,再看到底是什么问题