想当然的性能调优:加一个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,可以参见维基百科。

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

想当然的性能调优:加一个SSD相关推荐

  1. Linux性能调优用这个“必杀技”,稳了!

    " "这个系统好慢.网站又打不开了,太卡了,又没响应了!"相信大家都遇到过这种抱怨,这是应用系统出现了性能问题,需要性能调优. 性能调优,要求对计算机硬件.操作系统和应用 ...

  2. 数据库下午怎么插入_数据库性能调优大全(附某大型医院真实案例)

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:2020 年最棒的 9 个 Java 框架,哪个最香? 个人原创+1博客:点击前往,查看更多 出处:https: ...

  3. 性能测试分析与性能调优诊断--史上最全的服务器性能分析监控调优篇

    来源: https://www.cnblogs.com/laoqing/p/11629941.html 一个系统或者网站在功能开发完成后一般最终都需要部署到服务器上运行,那么服务器的性能监控和分析就显 ...

  4. Docker中应用的性能调优指南(一)- 先谈谈容器化性能调优

    摘要: 前言 性能调优是一个老生常谈的话题,通常情况下,一个应用在上线之前会进行容量规划.压力测试并进行验证,而性能调优则是在容量规划与验证结果之间出现差异时会进行的必然手段.从某种角度来讲,性能调优 ...

  5. linux tcp参数调优,Linux TCP 性能调优笔记

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 为了保证可靠连接,tcp 建立连接需要"三次握手",这三次握手对 tcp 的性能有至关重要的影响. ...

  6. 十八般武艺玩转GaussDB(DWS)性能调优:总体调优策略

    摘要: 性能调优是应用迁移或开发过程中的关键步骤,同时也在整个项目实施过程中占据很大的份量,本篇主要介绍数据库级别的性能调优思路和总体策略. 性能调优是应用迁移或开发过程中的关键步骤,同时也在整个项目 ...

  7. 鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法

    TaiShan特战队六月底成立,至今百日有余,恰逢1024程序员节,遂整理此文,献礼致敬!希望能为广大在鲲鹏处理器上开发软件.性能调优的程序员们,提供一点帮助.从今天开始,将陆续推出性能调优专题文章. ...

  8. 深入理解JVM虚拟机14:JVM性能调优的6大步骤,及关键调优参数详解

    JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数. 1.Full GC 会对整个堆进行整理,包括Young.Tenured和Perm.Full GC因为需要对 ...

  9. 面试官:我就问了一个JVM性能调优,没想到他能吹半个小时

    一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JV ...

  10. SSD性能调优的几种方法

    在服务器测试中,storage 的测试是很重要的一部分.在测试过程中,经常会遇到硬盘(一般指固态硬盘)的性能偏低的情况,这其中有环境因素,也有SSD本身的问题.下面我们介绍一下SSD性能调优的几种方法 ...

最新文章

  1. Javascript 基础-------this关键字
  2. 专题一:预处理数据(使用sklearn-preprocessing)
  3. 微服务网关哪家强?一文看懂Zuul, Nginx, Spring Cloud, Linkerd性能差异
  4. step3 . day3 数据结构之线性表 单项循环链表和双向循环链表
  5. python内容限制_Python 限制线程的最大数量的方法(Semaphore)
  6. Sublime Text 设置在标签页中打开文件
  7. faster-rcnn tensorflow windows python 训练自己数据
  8. java 标准_Java标准注解
  9. 解决Mac Chrome打开HTTPS证书错误问题
  10. ActionScript 3.0 API 中的 Video 类
  11. 《完美软件》读书笔记10:有关测试的主要误区
  12. cad批量选择相同块_怎样在cad中快速选定同一个块的所有对象?
  13. 樊登读书会掌控读后感_《掌控谈话》读后感1500字
  14. 致远OA漏洞学习——A6版本敏感信息泄漏漏洞
  15. bootable_noemulation.img linux,Syslinux使用
  16. html语言中%3cp%3e%3cbr%3e,求一段弹出窗口代码
  17. 浅析2D横版过关游戏关卡制作要点
  18. 《程序员》2012年4期精彩内容:创业
  19. Luogu 3807(Lucas定理)
  20. Verilog学习笔记(5):Verilog高级程序设计

热门文章

  1. php yar 安装失败_CentOS搭建Yar框架以及遇到的坑!
  2. java jcp_太久了,JCP:Eclipse考虑了新的Java规范流程
  3. Ubuntu和本机之间复制粘贴
  4. h5 字体加粗_HTML中如何将字体加粗
  5. C语言if( x)的意思,c语言中if(x)是什么意思?_后端开发
  6. 文件上传案例(java)
  7. 201711671109《Java程序设计》第九周总结(第8章)
  8. VMware vCenter/vSphere/vSan/Esxi/7.0 lic许可
  9. 烟火高桥蝶变“中非商港”,开放雨花引领国际商贸
  10. 手把手教你几种生成词云的方式