我是一个资历很浅薄的IT人,请教Sql Server的专家如下问题:我的一个SQL数据库希望从SQL 2000升级到SQL 2005或SQL 2008,目的是希望使用分区表功能,请问升级到那一个版本比较,我的SQL数据库基本情况如下:
1.数据库的数据量很大,其中主数据表1年数据在2E左右,目前在SQL2000下是使用历吏表进行管理,需要时使用视图查询,比较慢,当季数据用实时表。
2.数据库主机很普通,为单硬盘,另一个是备份盘,这产生另一个问题,升级后分区表能在单硬盘下起到性能优化作用吗?
3.SQL2005与SQL2008选择上请考虑一下占用空间与内存大小的问题?请给一下对比答案。
谢谢各位SQL高手。
------解决思路----------------------
单磁盘分区不能利用到“并行性”的优势,但是可以通过合理的分区消除来减少每次访问的数据范围,减少buffer pool的压力。第三个问题,没有实际测试的话一切都是理论值,但是我个人偏向使用2008
------解决思路----------------------
这个其实要是要看你的数据量,以及查询的条件。
如果你的大部分查询,都是只查询一个月的数据,为了进一步提高性能,可以考虑 按照 月来分区,如果每次查询都会查询1个季度的数据,那么可以考虑按照季度来分区。
另外,buffer pool的压力问题主要是这样的。如果只查询所需的分区,而减少了 全表扫描的次数,那么就能有效减小 对buffer pool的压力。
因为 sql server在执行sql语句时,是先把数据从磁盘读出来,然后放到 内存,具体就是 buffer pool中缓存起来的,如果查询中大量使用了全表扫描,那么就会读出大量的表的数据,放到内存中,反而把那些经常被访问的数据给挤出内存了。
比如:你的内存有10G,其中sql server 的buffer pool有6G大,但是有个大表,占了8G,那么一次全表扫描,就会占用整个 buffer pool,而现在这个大表改为了分区表,就减少了全表扫描的几率,大大提高了 buffer pool的效率
------解决思路----------------------
还有就是 分区表的特性:
1、分区表提高了系统的可用性。
2、是的维护更加方便了,比如,对历史数据的迁移,通过分区交换,可以实现秒级的迁移。
3、启用IO的并行性。也就是你提到的 把不同的分区放到不同的文件组,而不同的文件组对应不同的文件,不同的文件放到不同 硬盘上,这样当要读取2个分区的数据时,而2个分区分别放到了 D、E 两个独立的硬盘,就可以节省一半的IO时间,大大提高性能。
4、分区消除。也就是通过在where条件中加上分区字段,来限制 只查询指定的分区数据,而不再需要全表扫描,大大提升查询的性能。但是这个需要 注意 系统中已有的查询,是否都已加上了 where 分区字段过滤条件,因为如果没有加上,会导致对分区表进行全表扫描,而这种扫描的性能 要比单表的全表扫描 更差。
这就是 采用分区表后,性能不仅没有提升,返回更慢的原因了。