我希望你们中的许多人都在使用高流量的数据库驱动的网站,并且你们的主要可扩展性问题很可能是在数据库中。我最近注意到了以下几件事:
大多数大型数据库都需要一个 DBA 团队来扩展。他们不断努力克服硬盘的限制,最终只能采用非常昂贵的解决方案(SAN 或大型 RAID、频繁的碎片整理和重新分区维护窗口等)。维护此类数据库的实际年度成本在 10 万至 100 万美元之间,这对我来说太高了 :)
最后,我们找到了几家公司,如英特尔、三星、FusionIO 等,它们刚刚开始销售基于 SLC Flash 技术的超快但价格实惠的 SSD 硬盘。这些硬盘的随机读写速度比市场上最好的旋转硬盘快 100 倍(每秒高达 50,000 次随机写入)。它们的寻道时间几乎为零,因此随机 I/O 的成本与顺序 I/O 相同,这对数据库来说非常棒。这些 SSD 硬盘每 GB 的成本约为 10-20 美元,而且它们相对较小(64GB)。
因此,似乎有机会避免以传统方式扩展数据库的巨大成本,只需构建足够大的 RAID 5 SSD 驱动器阵列(仅需几千美元)。这样,我们就不必担心数据库文件是否碎片化,而且我们每秒可以承受 100 倍以上的磁盘写入,而无需将数据库分散到 100 个主轴上。
还有人对此感兴趣吗?我已经测试了一些 SSD 驱动器,可以分享我的结果。如果本网站上的任何人已经使用 SSD 解决了他们的 I/O 瓶颈,我很乐意听听你们的实战故事!
PS:我知道有很多昂贵的解决方案可以帮助实现可扩展性,例如经过时间考验的基于 RAM 的 SAN。我想明确一点,即使 5 万美元对于我的项目来说也太贵了。我必须找到一个成本不超过 1 万美元且实施时间不长的解决方案。
Dave、NXC 和 Burly,
感谢您的回复!我想澄清一下,“便宜”这个词对我的情况非常重要。因此,我必须使用便宜的戴尔服务器(4K 2950s,只有 8 个内存条)。我已经安装了 32GB 的 RAM,所以我不能继续以这种方式扩展。此外,添加 RAM 并不能避免磁盘写入瓶颈,这是我目前的主要问题。
我以前很关心 SSD 的使用寿命,但在阅读了现代磨损均衡算法后,我非常确定这些驱动器的使用寿命足够长。我的数据库每天写入 300GB,预计 2009 年每天写入量将超过 1TB。企业级 SSD 的设计目标是在数年内每天处理大约 10TB 的写入量。
我不同意 Burly 的观点,即从 SAS 迁移到 SSD 需要太多的人力。我的数据库是一个同步镜像,所以我可以升级镜像的一侧,然后观察几个月,如果它坏了,我可以故障转移到仍然有旧的、好的 SAS 硬盘的第二台服务器……
答案1
潜在问题
目前,我对使用 SSD 作为生产数据库有几个问题
- 大多数网站上的大多数数据库事务都是读取而不是写入。正如 Dave Markle 所说,首先要使用 RAM 来最大化性能。
- SSD 对于主流市场和企业市场而言都是新产品,没有哪个称职的管理员会将目前需要 15K RPM U320 磁盘通过光纤通道进行 RAID5 通信的生产数据库转移到未经证实的技术。
- 采用这项新技术的研究和测试成本、在其环境中对其进行审查、更新操作程序等前期成本(无论是在时间还是金钱方面)都是比大多数商店所能承受的更大的成本。
拟议福利
尽管如此,至少在纸面上,仍有许多因素有利于未来采用 SSD:
- 与 HDD 相比功耗更低
- 产生的热量更低
- 与 HDD 相比,每瓦性能更高
- 更高的吞吐量
- 更低的延迟
- 目前大多数固态硬盘的写入耐久性都达到数百万次,因此写入耐久性不再像以前那样成为问题。请参阅一篇有点过时的文章这里
因此,对于给定的性能基准,当您考虑包括直接电力和间接冷却成本在内的总拥有成本时,SSD 可能变得非常有吸引力。此外,根据您的环境的具体情况,给定性能水平所需设备数量的减少也可能导致人员配备需求减少,从而降低劳动力成本。
成本和性能
您补充说,您的成本限制在 5 万美元以下,并且您确实希望将其保持在 1 万美元以下。您还在评论中表示您可以获得一些“便宜”的 SSD,但隐瞒了 SSD 会比 DBA 或顾问更便宜。这可能是真的,具体取决于您需要 DBA 的小时数以及这是否是经常性成本。我无法为您进行成本分析。
然而,有一件事你必须非常小心是种类您获得的 SSD。并非所有 SSD 都是一样的。总的来说,您看到的售价为 200-400 美元(2008/11/20)的“廉价”SSD 适用于笔记本电脑等低功耗/低热量环境。与 10K 或 15K RPM HDD 相比,这些驱动器的性能水平实际上较低 - 尤其是写入性能。具有您所说的杀手级性能的企业级驱动器 - 如 Mtron Pro 系列 - 相当昂贵。目前它们的价格约为:
- 16GB 售价 400 美元
- 32GB 900 美元
- 64GB 售价 1400 美元
- 128GB 3200 美元
根据您的空间、性能和冗余要求,您可能会很容易地超出预算。
例如,如果您的要求需要总共 128GB 的可用存储空间,那么 RAID 0+1/10 或 RAID 5(带 1 个热备用)的价格约为 5600 美元
但是如果您需要 1 TB 的可用存储空间,那么 RAID 0+1/10 的价格将约为 51,000 美元,而带有 2 个热备用的 RAID 5 的价格将约为 32,000 美元。
概览
话虽如此,大型生产数据库的安装、配置和维护需要高技能人员。对于具有这种性能要求的公司来说,数据库中的数据和从这些数据提供的服务具有极高的价值。此外,还有很多问题无法通过硬件来解决。配置不当的 DBMS、糟糕的数据库架构或索引策略可能会破坏 DB 的性能。只需看看 Stackoverflow 在迁移到 SQL Server 2008 时遇到的问题这里和这里。事实上,数据库不仅占用磁盘空间,还占用 RAM 和 CPU 空间。平衡多变量性能问题以及数据完整性、安全性、冗余和备份是件棘手的事。
总而言之,虽然我确实认为硬件和软件技术的任何改进都会受到社区的欢迎,但大规模数据库管理(如软件开发)是一个难题,并且将继续需要熟练的工人。特定的改进可能无法为您或公司带来希望的劳动力成本减少。
进行一些研究的一个很好的切入点可能是 Brent Ozar 的网站/博客这里。您可能认识他的名字 - 他曾帮助 stackoverflow 团队解决 MS SQL Server 2008 性能问题。他的博客和他链接的资源提供了相当多的广度和深度。
更新
Stackoverflow 本身正在为其存储选择基于消费级 SSD 的路线。请在此处阅读相关内容:http://blog.serverfault.com/post/our-storage-decision/
参考
答案2
如果您拥有一个流量非常大的网站,并且可以通过使用 SSD 来提高写入性能,那么您可能会遇到 SSD 寿命问题,因此我目前还不推荐使用 SSD。
考虑到这一点,如何处理读取量高的数据库?答案很简单:用尽可能多的 RAM 塞满服务器。您会发现最热门的表几乎总是保存在 RAM 缓存中,任何对磁盘的大量命中都可能是由于大表或索引扫描造成的,而这通常可以通过适当的索引进行优化。
答案3
我担任数据库管理员已有 5 年多,一直在思考如何提高数据库性能。我一直在关注 SSD 领域,我认为它们肯定会成为越来越可行的选择。
看一下这个;
http://i.gizmodo.com/5166798/24-solid-state-drives-open-all-of-microsoft-office-in-5-seconds
Acard 还生产了一款名为 ANS-9010 的新产品,它是 GC-Ramdisc 的改进版本,允许您使用 DDR2 RAM 创建 SATA 驱动器(最高 64GB),使用 DDR2 内存条,理论最大速度为 400MB/s。
http://techreport.com/articles.x/16255/3
^^ 但该文章中另一个有用的功能是,它将 ANS-9010 与 SSD 市场上的所有参与者进行了比较,结果发现英特尔拥有 64GB x25-E SSD,这与硬件内存磁盘非常相似。
关于 SSD 令我担心的是,大型数据库会对它们施加压力,从而使它们磨损严重,因此您必须使用 raid 来镜像驱动器,这意味着您要支付两倍的费用;
硬件 ramdisk 的缺点是,如果断电,电池只能维持一段时间,所以你必须想出一些奇特的方法来备份。我相信你也可以为它们购买电源插头,但这仍然依赖于你的 UPS。
我建议您使用硬件 RAM 磁盘来存储临时数据库和 Windows 交换文件 - 并将数据库放在 Intel X25-E Extreme 上(64GB 大约 600 美元)。
无论如何,它都会尖叫并让我们所有人都非常嫉妒。
(也可考虑使用另一台 ANS-9010 来托管网站)
干杯,戴夫