SQLSERVER之(IO优化)

数据库学习 -IO篇

一:磁盘IO 优化

      1>.数据文件根据分类分离

不要数据库文件,例如日志,数据文件放在系统盘中。 日志,数据文件要分开,最好将系统的数据库与我们的数据库分开放在不同的磁盘中,同时也非常建议将tempdb放在单独的磁盘。因为日志文件是按顺序写的,而数据文件是随机读写的,所以,放在一起,势必使得磁盘的磁头来回的寻道。当配置为10w万元的数据库服务器,而开发人员却没有充分的使用这台服务器的性能,整个服务器只有一个逻辑分区,即只有一个C盘,大家也许认为这个问题和傻瓜,不用说,但是这样的例子,确实比比皆是。因为很多的公司的开发人员也是DBA,没有真正意义上的DBA。

      2>.增加磁盘的并行度 合理考虑吞吐量

在选择磁盘的时候,不要一味的考虑容量,而不考虑吞度量,例如要购买一个1TB的磁盘,最好是买几个小的磁盘,例如300GB的,将之拼接为1TB。主要是为了使得磁盘读取数据的并行度加大。


      3>磁盘分页和磁盘扇区

我们都知道 数据页每个大小事8K,而数据库在分配的时候,每次不是按照页来分配的,而是按照块,即,每次分配64K的空间,也就是8个页,那么我们在为每一个磁盘分区分卷的时候,最好将之定位64K,毕竟磁盘过多的分页,

      磁盘扇区不对齐 这个现在基本很少 具体可以google


    4>磁盘增长设置 

假如磁盘够大的话 可以禁止自动增长 采用手动调 直接设置数据库文件为非常大的一个值 而禁止自动增长 这样避免磁盘增长带来的IO消耗 和 碎片

    

    5>Raid的一些选择

        RAID 0:就数据分布在不同的磁盘上面,用来提高磁盘的IOPS(磁盘的I/O速度)。但是在数据库层面上不建议使用 容错不行 但是可以和其他的raid结合起来使用

        RAID 1:将数据完整的保存在不同的磁盘上,通过冗余来提高容错性。在数据库的I/O要求比较低的情况下,RAID 1 可以提供不错的性能,如果数据库的I/O要求很大 不是非常适合
        RAID 5 或者 6: 在性价比方面 往往是个不错的选择。因为RAID 5或者 6通过奇偶校验位来提供数据容错能力,可以通过奇偶校验在某个磁盘的数据丢失之后将其恢复。那么 RAID 5的磁盘容量为(N-1)*磁盘容量,例如三个100GB的磁盘组成的RAID 5之后,可用的大小就是200GB左右。RAID 5组成的磁盘不要太多,超过了6个以上的时候,写的性能就相当的差了,相较于RAID 1而言,5 确实不错,以为采用了最小的容量来提供不错的容错性,同时5也将数据分布在不同的磁盘上面,使得读的性能不错。
如果数据库中的读的操作非常多,而写的操作很少,那么建议可以采用RAID 5 或者6

     RAID 10/RAID01:提供非常好的写入性能,同时读的性能非常接近于RAID 0,但是读的性能比RAID 5稍微差一点。
另外有一点要注意的是:RAID10 用了一半的磁盘空间来备份数据,磁盘的实际利用只有一半了,这一点要注意,因为成本高。

 5>日志文件和 tempdb

对于日志文件而言,因为顺序的写入方式,所以RAID 1非常适合用来存在日志文件。对于搞写入的数据而言,每一个数据库的日志文件最还是放在不同的物理磁盘上面,如果全部放在相同的磁盘上面,就会产生写入的延时了。对于tempdb,要特别的考虑一下。数据库的很多操作都会使用到tempdb,例如sort,hash,临时数据,版本控制等等。我建议,把tempdb的文件和数据文件与日志文件分开放,并且还得放在单独的物理磁盘上,因为tempdb是一个高写入的数据库,RAID 1或者RAID10非常适合tempdb的存放。还有就是,因为tempdb是一个临时的存储区域,所以如果有成本的话,建议采用固态硬盘或者闪存,这样可以非常大的提升性能。关于tempdb的话题太多了,还要涉及里面的文件类型,例如PFS....

  

猜你喜欢

转载自blog.csdn.net/pzk417/article/details/7571517