SQL Server 2K / 2K5 / 2K8和固态磁盘:特定的优化?


9

这里有人在固态驱动器上运行SQL Server吗?您是否找到任何具体的优化技巧?我特别希望降低SQL Server执行小型随机写入操作的频率的方法,因为它们是SSD性能的克星,尤其是MLC SSD驱动器。

当然,有一些明显的优化可以做到:应该从SSD中读取大量数据,而将大量写入数据留给传统的旋转磁盘。这自然包括交易日志!

当然,给定足够的预算,您可能希望使用X25-E或Vertex Ex系列之类的SLC SSD磁盘或各种企业级产品。但是我也对可能有益于MLC SSD设置的提示感兴趣。我认为这是一个有趣的领域。我的一位客户的预算很小,并且数据集正在迅速增长,他们正面临将近一百个查询的完全重写,以保持良好的性能水平。但是,我有一个偷偷摸摸的怀疑,即少于500美元的RAM和SSD空间可能会为他们带来比数千美元(可能数万美元)的开发人员时间更大的性能提升。

Answers:


3

不确定减少SQL Server进行的少量随机写入的数量是什么意思。SQL Server仅在检查点期间才写出数据页-因此,限制写入次数的唯一方法是更改​​检查点间隔或不进行太多IUD操作。你还有什么意思吗

在我所见过的所有SSD的实现中(少数),这与您所建议的相反-SSD的最佳用途似乎是用于写入大量事务日志和tempdb-基本上,这是我最大的/ O子系统瓶颈并将SSD留在其中-因为搜寻时间和等待时间减少到一个较低的常数。

查阅MS产生的这份研究论文(不幸的是,关于SQL Server的详细信息没有详细介绍):将服务器存储迁移到SSD:权衡分析

希望这可以帮助!


感谢您对MS文章的链接。它在细节上令人沮丧地不足,不是吗?:)不幸的是,少量的随机写入确实可以使SSD变得合适。简而言之,即使是很小的写入(即4KB),SSD也必须将整个块读入内存,对其进行修改,然后再写回。这就是当前闪存的工作方式。出色的
John Rose

2

您无法修改SQL Server的IO特性。对于数据文件,其磁盘访问的基本单位是8Kb页面。它将主要在检查点期间写入它们,但在可能的情况下也将延迟写入它们。
SQL不会在返回数据之前等待对数据磁盘的写入完成,而只是必须完成日志写入。如果您只能在磁盘上保留一个数据库日志,那么它将是顺序写入,并且在普通快速硬盘上就可以了。
从SQL的角度来看,性能受到的影响是必须读取磁盘。如果可以为其提供更多的内存,则SQL将在内存中保存更多的数据页,这比任何类型的磁盘,SSD或其他方式都要快。显然,您还可以通过创建适当的索引来减少磁盘读取的次数。我希望SSD也会对这些读取有所帮助,因为它们很可能是随机的,并在等待驱动器磁头移动时停滞下来。
我不知道我们在这里讨论的数据库大小,但是您可能想看一下HyperOS。他们制作的sata磁盘实际上只是DDR2内存条的负载,并带有SSD或2.5英寸磁盘作为备份。那么,服务器的访问模式就无关紧要了。我不会把日志放在这样的东西上。日志使您的数据保持一致,它们需要使用可靠的介质,并且尽管备份了SSD和电池,并且服务器可能具有UPS等,但我对将日志保存在真实硬盘上仍然感到不安在某种容错RAID阵列中。


1

由于磁头寻道延迟,小的随机操作是传统磁盘的克星。SSD非常适合解决这个问题。

通过长时间的顺序操作,标准磁盘的性能会非常好,因此使用SSD毫无用处(当然,从性能的角度来看)。


2
由于接近零寻道延迟,SSD非常适合随机读取操作。由于SSD写入操作涉及读取整个闪存块(通常为128KB),修改内容并将整个块写回到闪存,因此它们在随机写入操作时不那么熟练。至于长时间的顺序操作,性能更好的消费级固态硬盘(英特尔,OCZ Vertex,三星)可实现200MB /秒以上的读取速度和80MB-150MB的写入速度,远高于单个旋转磁盘可以产生的速度。
约翰·罗斯

你确定吗?我不明白为什么写操作应该涉及在再次写出数据块之前先读取它……要写的数据应该在计算机的内存中,不是吗?
Massimo 2009年

2
@Massimo:因为OS仅写入几个字节,但是SSD以128KB(通常)为单位(页)工作。它只能写一个128KB的页面,仅此而已。因此,当您修改页面中间位置时,驱动器读取整个页面,更新中间位置,然后通常在其他位置写入新页面,同时使旧位置无效。
Cristian Ciupitu 09年

Cristian Ciupitu是正确的。在某些SSD中,这可以通过板载缓存来缓解(我相信所有使用Indilinx控制器的驱动器都具有64MB缓存),也可以通过操作系统的写缓存(如果启用)来缓解。但是,即使是64MB的高速缓存也有其局限性-对于执行大量写入操作的数据库服务器,64MB可能还不够。固件制造商没有发布很多细节,但是人们会假设更好的固件(Intel,Indilinx)会进行一些智能的重新排序/批处理,以将较小的随机写入保持在128KB页面内,以最大程度地减少这种开销。
约翰·罗斯

根据我对缓存的了解,它将为您节省很多您担心的小写操作。甚至没有什么关系,因为数据库被设计为执行大量线性读/写操作。我敢打赌,SSD仍然可以更好地工作,因为它是线性读取而不是顺序读取。意味着数据和SSD之间仍将存在间隙,这将消除寻道时间。
火热

0

此处尚未添加到注释线程中,但如果将SSD上任何内容的DB页面大小/多次读取计数设置为SSD页面大小的倍数,这应该不是问题。

我已经很长时间没有使用SQL Server了,所以我不确定这些选项是否可用。在过去的几年中,我一直在从事Oracle和DB2的开发,这将解决您的问题,因为可以将DB适当地调整为磁盘特性。


0

我建议对齐存储数据库文件的分区。

我还建议您确定针对perf(ldf和TempDB)在RAID 0上进行的操作,然后将关键数据放在RAID 1(mdf)上。

第三,您确实应该更新驱动器的固件以及SATA控制器固件/驱动器。这样,您就为硬件公司及其开发人员提供了为您优化性能的机会。


RAID 0永远不应用于数据库服务器。如果单个驱动器发生故障,则数据库将关闭,直到更换磁盘并从磁带恢复丢失的数据(包括日志)为止。
mrdenny

在没有钱的世界里,所有东西都应该在电池供电的L1缓存上运行。在银行业中,LDF文件与mdf一样重要。对于科学计算,MDF是唯一真正需要100%的文件。
GregC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.