有谁有使用 SQL 2008 的经验,但全部在 RAM 中?试图让某些事情更快,可能会追求这一点,谢谢
答案1
这取决于你所说的“全部在 RAM 中”是什么意思。
如果您想从 RAM 驱动器运行数据库,您会发现这不太可能(除非您有某种 RAM 驱动器卡,在操作系统看来就像普通磁盘,即提供 SATA 或 PATA 接口),因为 SQL Server 会拒绝。它假设它写入的任何数据都足够重要,值得保留,并且不会将其写入易失性存储介质而冒风险。您可以通过在 VM 中运行它并从 RAM 驱动器运行该 VM 来欺骗它,但我不建议同时尝试这两种方法,原因相同(如果发生断电或重启情况,您将丢失所有数据),并且由于虚拟化解决方案会带来一系列其他性能损失,需要担心。
如果您的问题是读取活动缓慢(即许多操作导致从磁盘读取,那么只需增加机器中的 RAM 量,使其大于通常的工作集或最好大于整个数据库。这样,除非您的 SQL Server 版本施加了人为的 RAM 限制(IIRC Express Edition 不会使用超过 1Gb),否则它将使用充足的内存将其读取的任何内容缓存在 RAM 中,以便下次需要时可以快速读取。如果您希望在清除数据后随时将数据预加载到 RAM 中(即由于安装更新而重新启动后),那么您可以编写一个脚本,强制扫描所有索引和数据页,然后将其读入内存。
如果问题是由于多次写入操作造成的,那么优化磁盘布局可能会有所帮助。如果不了解您的数据库的更多信息,我们无法提供具体提示,但标准的经验法则(例如尝试将数据文件、事务日志和 tempdb 保存在单独的物理驱动器上)可能会有所帮助。
答案2
默认情况下,SQL Server 将使用服务器中所有可用的 RAM。最佳做法是将 SQL Server 配置为比服务器实际拥有的 RAM 少 2-4 GB(取决于安装了其他什么、使用了多少 SQL CLR 等)。SQL Server 将使用服务器中的内存作为缓冲区缓存,以便尽可能少地从磁盘读取数据。SQL Server 可用的 RAM 越多,SQL Server 可以加载到内存中的数据就越多。在完美工作中,SQL Server 几乎从不从磁盘读取数据(启动时除外,因为某些时候必须从磁盘读取数据),因此唯一需要的磁盘 IO 是写入 IO。
答案3
在 RAM 磁盘上运行 SQL Server 就像将机器的页面文件配置在 RAM 中一样:它会破坏系统的期望。
SQL Server 实际上很像操作系统,它有自己的进程、线程版本,有自己的内存管理器和其他东西。那么如果我们在 RAM 磁盘上运行 SQL Server 会发生什么?
- 我们失去了数据库一致性。如果服务器发生故障,我们将丢失数据. SQL Server 的标准配置将不会丢失已提交的数据。
- 我们最终会低效地使用内存,因为 SQL Server 将使用其缓冲池和各种缓存来存储已存在于 RAM 中的数据。在最坏的情况下,您将限制 SQL Server 的内存使用量少于系统内存的 50%。大部分内存最终将用于存储数据库和/或日志文件,而 SQL Server 仍会尝试将数据放入其内部优化的缓冲池中,并且缺乏足够的内存来缓冲数据。
第一点是最重要的。一旦发生故障,RAM 磁盘上的 SQL Server 将不再具有事务一致性。其他一切都不关你的事,但我可以肯定地说,在 RAM 磁盘上运行 SQL Server 数据库或日志文件的技术优势不可能超过风险。