想当然的性能调优:加一个SSD

想当然的性能调优:加一个SSD

 

原文:Knee-Jerk Performance Tuning: Just Add an SSD

地址:http://sqlperformance.com/2014/11/io-subsystem/knee-jerk-performance-tuning-just-add-ssd

 

译文:

今天我要来讨论一下固态硬盘(Solid State Disks,SSD)及它们在SQL SERVER环境中可能存在的问题。需要进一步深度了解SSD,可以参见维基百科

SSDSQL SERVER性能有什么影响?

SSD在读写过程中没有任何移动部件,所以基本就没有I/O延迟。传统磁盘(HDD)的延迟主要由于下面两者:

·        在磁盘表面,磁头移动到正确的磁道,即所谓的查找时间。

·        等待磁盘旋转至磁道上的正确点,即所谓的旋转延迟。

这就意味着当使用传统磁盘、且有I/O瓶颈的时候,使用SSD会有一个巨大的性能提升。

 

就这么简单。

 

有两点虽然超出了本文的讨论范围,但值得注意的是:当空间变满时,SSD的性能会有大幅下降(参考AnandTech);SSD驱动程序的wear leveling技术(用来延长SSD中NAND单元寿命)额外需要一些系统内存,而且各厂商也不尽相同。就这些,下面言归正传。

避免错误的网络建议

网上有两条关于SQL SERVER和SSD比较离谱的建议。

第一条是围绕应将什么放入到SSD中?建议总是将tempdb和事务日志文件放入到SSD中。咋看还是很有道理的,因为事务日志和tempdb一般总是系统的瓶颈。

但是如果它们不是瓶颈呢?

你的工作可能大部分只是读,这样的话事务日志将不是瓶颈,将它放到SSD可能就浪费了昂贵的SSD。

你的工作可能不会大量使用tempdb,将它放到SSD也是一种浪费。

所以,当你考虑准备将SQL SERVER的哪部分移至SSD中时,你应该先调查一下I/O瓶颈在哪儿?这其实非常容易——可以使用我的这段代码,该代码使用sys.dm_io_virtual_file_stats来提供SQL SERVER实例(instance)中所有数据库的所有文件的I/O延迟的快照。为了使这些延迟数值有意义——将这些值与好/坏的数值进行比较,可以阅读我特地围绕tempdb和事务日志I/O延迟的长文

再说,即使你发现有很高的延迟值,也不要想当然地将那些性能不好的文件移至SSD中:

·        对于数据文件读延迟,应该调查为什么会有这么多的读发生,参见文章

·        对于日志文件写延迟,应该考虑所有可能的日志性能调优,以及日志文件都记录了什么,参见文章1文章2文章3

 

最糟糕的可能是:当你使用了一堆SSD,并且根据网络建议将tempdb和日志文件移至SSD中,但是并没有获得性能的提升。那以后老板就不会批准你购买更多昂贵的SSD了。

另一条建议是关于索引碎片的,建议是:因为SSD非常快,所以使用SSD时根本就不用担心索引碎片。

简直是胡说八道!

我用下面三点驳斥:

1.      SSD并不能阻止索引碎片的生成:页分裂是因为随机插入或者行大小(row size)增加而需要更多的空间造成的。不管数据/日志文件保存在何处(是SSD还是HHD),页分裂产生同样数目的日志记录、资源使用以及潜在的线程等待。

2.      索引碎片表示包含很多页密度很低(即页中有很多空闲的空间)的数据/索引页。你真的愿意在如此昂贵的SSD中存储大量的空闲空间吗?SSD此时一点忙也帮不上。

3.      我的同事Jonathan Kehayias曾使用扩展事件(ExtendedEvents)对围绕索引碎片的I/O模式(特别是本网络建议)做过一个深入的调查,发现当使用SSD时,索引碎片仍然会有性能影响,可以参见文章

SSD关于索引碎片唯一能做的事就是读的速度加快了,所以当存在索引碎片时性能损失减少了(相比于HHD而言)。但是上文第3点显示还是会有损失的。

所以说:在SQL SERVER环境下,SSD并不能改变处理索引碎片的方式,也不能阻止索引碎片。

确信能保护数据

我见到人们围绕使用SSD的一个典型的问题是只使用一个SSD。仅仅使用一块SSD硬盘,那么会使用哪个级别的RAID呢?0,RAID0根本就不能提供任何冗余。

如果你要使用SSD,你应该至少使用两块——使用RAID1(镜像)配置。如果以牺牲系统的有效性而获得的性能提升没有任何意义。

有两种说法提醒我使用至少两块SSD硬盘。一种说法是:为一块SSD卡提供两个Windows驱动器,在这两个驱动器上当然可以创建一个Windows镜像卷,这不是和两个物理上独立的SSD做RAID1镜像一样的吗?

不一样,当然不一样。这还是一块物理的SSD硬盘,没有任何冗余。你有见过一个SSD卡只坏了一半吗?反正我没有见过。所以正确的做法是使用两块SSD,为你的数据实现正真的冗余。

还有一种说法是:因为SSD不需要转动,所以不会失败的。这也错了,SSD和传统磁盘(HHD)一样也会失败。我就亲眼看见在我们的实验测试环境下两个企业级别的SSD失败了。根据StorageReview.com上的这篇文章,消费级别的SSD的MTBF(“Mean Time Between Failure”,平均故障间隔时间)为2百万小时,而消费级别的传统磁盘为1.5百万小时,我想企业级别的驱动器应该也差不多,但是表明SSD却是也会失败的。

总结

所以不要陷入这样一个思维:只要使用了SSD就意味着会获得大的性能提升——你一定得仔细斟酌,并且也不要相信使用了SSD就不要管索引碎片了。

SSD确实是一个提升性能的有效途径,但是对于其昂贵的价格,你得想好如何实现效益最大化,要将好钢用在刀刃上。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值