我们有一个大约 40GB 的中型 SQL 数据库,准备将其移动到装有服务器 2008 r2 x64 的新机器上
一位昂贵的承包商刚刚进来,说我们需要 72gb 的 RAM,这样整个数据库就可以存在于 RAM 中,我觉得这很荒谬,但也许我错过了什么。
我想知道是否存在一个“经验计算法则”,可以暗示在 SQL 实例上使用大量 RAM。
编辑: DB 最多可同时容纳 150 人访问,用于运行预订系统。非常糟糕的旧 DB 模式,很多表中有大量可怕的列,大量半无意义的索引。通过 .net 访问一些 sprocs,但也使用原始 sql 进行查询,以及 VisualDataFlex 使用的任何内容。
谢谢
纳特
答案1
没有什么好的经验法则。
额外 RAM 的实用性在很大程度上取决于数据库的设计方式以及查询模式或用户。举一个极端的例子,如果您总共有 1 TB 的数据,索引良好,并且有 1000 个同时使用的用户只关注 1 个特定行(select * from dbo.BigTable where pkey_id = 42),那么您只需很少的 RAM 即可。更多 RAM 的影响还取决于磁盘存储子系统的速度。如果您有超快的存储(好的桑,好的如果您使用的是 DASD 或 SSD,那么当服务器需要读取数据时,您可能不会注意到延迟。
理想情况下,您希望数据库中的所有数据可能需要白天缓存在 RAM 中的数据。有时这被称为“热数据”或“热页”(在 SQL Server 中,数据以称为“页”的单位组织)。热数据的一个例子可能是今天或昨天收到的订单,运送这些订单的工人将需要这些订单。冷数据的例子可能是两年前收到的订单,但这些订单仍然存在于系统中,以便 CSR 可以查找旧订单。
如果一个设计良好的 OLTP 系统总共有 40 GB 的数据(而不是总计 40 GB 的数据文件),那么热数据可能只有 10 GB、5 GB、1 GB 甚至更少。在过去,购买 64 GB 的 RAM 和购买 8 GB(甚至更少)的 RAM 之间的差异是天文数字,因此花大量时间购买合适的 RAM 是值得的。
您总是需要一些额外的 RAM 来处理诸如操作系统、病毒扫描程序、RDP 会话等“开销”。您还需要考虑数据库的增长。
另外要记住的是,RAM 是以“块”的形式提供的。您无法在 48 GB 和 49 GB 之间做出选择,您必须逐步增加,可能从 48 GB 增加到 64 GB。块的大小取决于当前市场上的 RAM 技术以及您的内存有多少个通道。旧服务器对内存进行了一次更改,然后服务器开始进行两次更改,现在大多数强大的服务器都有三个内存通道。因此,您不能只添加一根内存条,而需要一次添加两根三根内存条。
如果您的数据库设计不良且索引不良(如您所说),那么 SQL 最终会读取大量数据,而如果数据库设计得更好,则无需读取这些数据。将这些数据全部放在 RAM 中并不意味着它不会读取所有数据。这仅意味着它读取 RAM 中的所有数据的速度比数据位于磁盘存储中时的速度要快。这并不一定能解决您的所有问题;从 RAM 读取数据虽然很快,但仍然需要一定的时间,并且仍然可能出现阻塞和死锁问题,从而导致性能问题。
另一件事是,当人们在系统上运行使用去年数据的大型报告时,更多的 RAM 会有所帮助。人们一直将 OLTP 系统视为报告系统。这可能并不罕见,尤其是在使用随机 SQL 查询时。
您可以花时间(和金钱)在开发人员和测试人员身上,以改进数据库设计并对前端进行所需的任何更改。
快速访问 hp.com 后,我发现可以花大约 9,000 美元购买一台具有 96 GB RAM 的(非常)精简的服务器。
(也就是说每 GB 不到 100 美元,还不包括服务器中的其他部件。例如电源或处理器。像我这样的老人都记得 RAM 的价格是每兆字节 5,000 美元。用 M 表示。)
您能花 9,000 美元进行开发和测试的时间有多快?(按照我所在地区的公司费率,这笔钱几乎无法支付一个人一个月的工资。)这段时间足以修复数据库中的所有内容吗?如果更改的代码中出现错误怎么办?
停机添加内存可能需要一个小时,几乎任何人都可以完成这项工作。迁移到全新的服务器可能需要几天的准备工作和一个小时的停机时间,并且您需要有经验的人(可能是 DBA)。
添加 RAM 不太可能导致任何错误。迁移到新服务器不太可能导致任何难以发现的问题。(通常,东西要么正常工作,要么明显损坏。通常是“哎呀,密码错误”或“哎呀,忘记复制链接服务器”,绝不会是“嘿,这个计算突然无法正常工作”。)
因此,假设我们将所有内容都保存在 RAM 中,并且我们有一个 40 GB 的数据库,我们需要一些空间来满足开销。我会考虑使用 48 GB 左右的服务器。另外,我们需要一些增长空间。假设从现在开始增长 25%,即 12 GB,我们将达到 60 GB。下一个级别(我实际上可以购买)是 64 GB。如果您的顾问推荐三通道服务器,下一个级别可能是 72 GB。因此,他的建议并不一定离谱。也许您不需要那么多核心/插槽,这可能会让您回到双通道服务器(无论如何这都会更便宜),您可以购买少一点的 RAM。
总结:
简而言之,RAM 很便宜,时间很贵,我很少会这样。如果你没有钱、时间或意愿去修复数据库,或者你不想冒险在应用程序中添加错误,那么用 RAM 来解决问题是毋庸置疑的。另一个好办法是提高磁盘存储系统的响应能力(换句话说,增加更多主轴、更多 RPM 或使用 SSD)。
我想问的是,为什么顾问不想让你花一年时间和十万美元让他重写这个系统。