有人在固态驱动器上运行 SQL Server 吗?有没有找到具体的优化技巧?我对降低 SQL Server 执行小型随机写入操作的频率的方法特别感兴趣,因为它们是 SSD 性能的克星,尤其是 MLC SSD 驱动器。
当然,可以做一些明显的优化:读取繁重的数据应该从 SSD 提供,而写入繁重的数据应该留给传统的旋转磁盘。这自然包括事务日志!
当然,如果有足够的预算,人们会希望使用 X25-E 或 Vertex Ex 系列等 SLC SSD 磁盘或各种企业级产品。但我也对可能有益于 MLC SSD 设置的技巧感兴趣。我认为这是一个有趣的领域。我的一个客户的客户预算很少,数据集却急剧增长,他们面临着近百个查询的完全重写,以保持良好的性能水平。然而,我有一个隐秘的怀疑,即不到 500 美元的 RAM 和 SSD 空间可能会比价值数千(可能数万)美元的开发人员时间获得更大的性能提升。
不知道减少 SQL Server 执行的少量随机写入是什么意思。SQL Server 仅在检查点期间写出数据页 - 因此限制写入次数的唯一方法是更改检查点间隔或不要进行太多 IUD 操作。你的意思是别的吗?
在我见过的所有 SSD 实现中(少数),这与您的建议相反 - SSD 的最佳用途似乎是用于写入繁重的事务日志和 tempdb - 基本上我最大的地方在哪里/O 子系统瓶颈并将 SSD 固定在那里 - 因为寻道时间和延迟减少到一个较低的常数。
查看 MS 制作的这篇研究论文(遗憾的是没有详细介绍 SQL Server 细节):将服务器存储迁移到 SSD:权衡分析。
希望这可以帮助!
您不能修改 SQL Servers IO 特性。对于数据文件,其磁盘访问的基本单位是一个 8Kb 页面。它将主要在检查点期间写入它们,但也会在可能的情况下懒惰地写入它们。
SQL 不会等到数据盘的写入完成才返回,它只是必须完成的日志写入。如果您只能在磁盘上保留一个数据库日志,那么它将是顺序写入,并且在普通的快速硬盘上会很好。
从 SQL 的角度来看,性能受到的影响是它必须读取磁盘。如果你能给它更多的内存,那么 SQL 将在内存中保存更多的数据页,这比任何类型的磁盘、SSD 或其他方式都快。显然,您还可以通过创建适当的索引来减少磁盘读取次数。我希望 SSD 也有助于这些读取,因为它们很可能是随机的并且等待驱动器磁头移动。
我不知道我们在这里谈论的数据库大小,但是您可能想看看 HyperOS。他们制造的 sata 磁盘实际上只是负载 DDR2 内存条,并带有 SSD 或 2.5 英寸磁盘作为备份。那么服务器的访问模式就无关紧要了。我不会把日志放在这样的东西上。日志使您的数据保持一致,它们需要在可靠的介质上运行,尽管它有备用 SSD 和电池,而且服务器可能有 UPS 等,但我仍然会因为没有将日志放在真正的硬盘上而感到不安在某种容错 RAID 阵列中。
由于磁头寻道延迟,小型随机操作是传统磁盘的克星……SSD 非常擅长解决这个问题。
对于长时间的连续操作,标准磁盘的性能非常好,因此使用 SSD 没有任何意义(当然,从性能的角度来看)。
此处尚未添加到评论线程中,但如果您将 SSD 上任何内容的 DB 页面大小/多读取计数设置为 SSD 页面大小的倍数,这应该不是问题。
我很长时间没有在 SQL Server 上工作过,所以我不确定这些选项是否可用。过去几年我一直在做 Oracle 和 DB2,这将解决您的顾虑,因为 DB 会根据磁盘特性进行适当调整。
我建议对齐存储数据库文件的分区。
我还建议确定 RAID 0 上的性能(ldf 和 TempDB),并将关键数据放在 RAID 1(mdf)上。
第三,您真的应该更新驱动器的固件以及 SATA 控制器固件/驱动程序。通过这样做,您可以让硬件公司及其开发人员有机会为您优化性能。