我想为 SQL Server 计算机购买一块 SSD,我应该比较哪些基准?高/低队列深度?随机/顺序传输速率?IOPS?
答案1
IOPS 差不多。
队列深度无关紧要 - 基本上,一些高端系统在队列中的东西越多时工作得越好。如果没有上下文,这不会给你任何有意义的信息。
传输速率取决于 IOPS——必须先有人读取/写入内容。
最后,随机 IO 总是会下降到 IOPS。IOPS 会在需要时直接转换为传输速率。请注意,对于企业,SQL Server 始终执行 64k IO 或该值的倍数。因此,4kb 等无关紧要。从中您可以提取所有其他信息。响应时间太慢,排队 - 可用的 IOPS 不足。
答案2
您需要的基准是以下工作负载的 IO 延迟:
- 随机读取
- 随机写入
您可能还对这些工作负载的吞吐量(MB/s)感兴趣:
- 顺序读取
- 顺序写入
对于所有写入,请记住,在 IO 到达磁盘之前缓存到易失性内存可能会使 MB/s 看起来比实际更高。SSD 在随机 IO 方面的表现与在顺序 IO 方面一样好。
答案3
TechNet 上有一篇很好的文章,虽然它不再维护,但它仍然可以让您了解 IOPS 和磁盘饱和度如何影响 SQL Server 磁盘 IO 性能。
摘要:I/O 系统对于 SQL Server 的性能非常重要。在为 SQL Server 配置新服务器或添加或修改现有系统的磁盘配置时,最好在部署 SQL Server 之前确定 I/O 子系统的容量。本白皮书讨论了如何验证和确定 I/O 子系统的容量。有许多工具可用于执行此类测试。本白皮书重点介绍了 SQLIO.exe 工具,但也比较了所有可用工具。它还介绍了 SQL Server 2005 的基本 I/O 配置最佳实践。
文章继续解释说,SQL Server 将以 64 kb 的倍数读取,这对应于一个范围(其本身是 8 x 8 页;页面 = 8 kb)了解页面和范围
SQL Server 将读取 64 kb 的数据(这就是为什么您应该使用 64kb 块大小格式化磁盘的原因),并且根据查询的性质以倍数读取:64 kb、128 kb、256 kb、512 kb 甚至 1024 kb(企业版)。
您可能需要考虑运行一个工具来根据您的 SQL Server 版本测试各种 IO 模式(读/写;随机/顺序;8 kb - 1024 kb),然后将 HDD 与 SSD 的结果进行比较。
有一个旧的建议,事务日志文件的写入延迟应在 1-5 毫秒之间(建议为 1 毫秒),数据文件的读取延迟应在 5-20 毫秒之间(建议为 10 毫秒)。
磁盘延迟的测量值。值越低越好,但这可能会有所不同,并且取决于发出的 I/O 的大小和性质。不同存储配置的数字也不同(缓存大小/利用率会对此产生很大影响)。
在经过良好调整的 I/O 子系统上,理想值应为:
•日志为 1-5 毫秒(带缓存的阵列上理想情况下为 1 毫秒)
•OLTP 系统上的数据为 4-20 毫秒(理想情况下为 10 毫秒或更短)
•DSS(决策支持系统)类型为 30 毫秒或更短。此处的延迟可能会因针对系统发出的同时查询数量而有很大差异。当总吞吐量低于预期时,应调查持续超过此值的延迟。结合您的特定系统的正常情况来考虑这些问题。
确保监控磁盘延迟以进行趋势分析。可以使用 SQL Server 2005 中的 sys.dm_io_virtual_file_stats 动态管理视图找到特定于 SQL Server 数据文件的 I/O 数量和延迟。
本文列出了各种要监控的计数器,这些计数器将为您提供基线,您可以从中确定如果将磁盘从 HDD 更改为 SSD 时的性能提升。
您需要以下组合:
- 磁盘读取次数/秒
- 磁盘写入/秒
- 平均磁盘/秒读取量
- 平均磁盘/秒写入量
- 平均磁盘字节数/读取
- 平均磁盘字节数/写入
- 磁盘读取字节数/秒
- 磁盘写入字节数/秒
计划在您的旧 HDD 系统上监控这些值,然后将它们与您的 SSD 系统上的值进行比较。
答案4
简短的回答是“视情况而定”
不幸的是,如果不知道您的使用模式,几乎不可能提出“理想”的解决方案。
需要注意的一些事项
分离数据、日志和操作系统。您可以将数据和操作系统放在旋转磁盘上,只将日志放在 SSD 上,这样可以以较低的成本提高性能。无论如何,您都应该这样做,即使您使用的是旋转磁盘,也要将所有部分分离到各自的卷上,如果负担得起,则每个卷都使用 RAID 10。
为解决方案添加 RAM 可能会更好,如果您可以将整个数据库加载到 RAM 中,那么它的速度将比 SSD 或 HDD 快得多。您可以通过几种不同的方式实现这一点。
如果你确实要使用 SSD,请确保你的备份是好的。无论如何最好这样做 :)