MS SQL 2008 全部在 RAM 上?

Tim*_*Tim 7 sql-server sql-server-2008

任何有使用 SQL 2008 经验但都在 RAM 中的人?试图使某些事情更快,并且可能会继续这样做,谢谢

Dav*_*ett 10

这取决于您所说的“全部在 RAM 中”是什么意思。

如果您想从 RAM 驱动器运行您的数据库,您会发现这不太可能(除非您有某种 RAM 驱动器卡在操作系统看来就像一个普通磁盘,即提供 SATA 或 PATA 接口)因为 SQL Server 会拒绝。它假设它写入的任何数据都足够重要以保留并且不会通过将其写入易失性存储介质而冒险。您可以通过在 VM 中运行它并从 RAM 驱动器运行该 VM 来欺骗它,但出于相同的原因,我不建议同时尝试这两种方法(如果发生断电或重启情况,您将丢失所有数据)并且由于虚拟化解决方案会出现一系列其他性能问题需要担心。

如果您的问题是缓慢的读取活动(即导致从磁盘读取的大量操作,那么只需将机器中的 RAM 量增加到大于通常的工作集或更好地大于整个数据库。这样,除非您的 SQL Server 版本强加了人为的 RAM 限制(IIRC Express Edition 不会使用超过 1Gb),否则它将使用大量内存将读取的任何内容缓存在 RAM 中,以便下次可以快速读取如果您希望在清除数据后的任何时间(即由于安装更新而重新启动后)将数据预加载到 RAM 中,那么您可以编写一个脚本来强制扫描所有索引和数据页并将其读入内存.

如果问题是由多次写入操作引起的,那么优化磁盘布局可能会有所帮助。在不了解您的数据库的更多信息的情况下,我们无法给出具体的提示,但标准的经验法则(例如尝试将您的数据文件、事务日志和 tempdb 保存在单独的物理驱动器上)可能会有所帮助。


mrd*_*nny 8

默认情况下,SQL Server 将使用服务器中的所有可用 RAM。最佳做法是配置 SQL Server 的可用 RAM 比服务器实际拥有的 RAM 少 2-4 G(取决于安装的其他内容、您使用的 SQL CLR 数量等)。SQL Server 将使用服务器中的内存作为缓冲区缓存,以便尽可能少地从磁盘读取数据。SQL Server 可用的 RAM 越多,SQL Server 可以加载到内存中的数据就越多。在完美的工作中,SQL Server 几乎从不从磁盘读取(除了在启动时,因为数据必须在某些时候从磁盘读取),因此唯一需要的磁盘 IO 是写 IO。


Aar*_*iel 5

在 RAM 磁盘上运行 SQL Server 就像将机器的页面文件配置在 RAM 中一样:它会打破系统的预期。

SQL Server 实际上很像一个操作系统,它有自己的进程、线程版本,有自己的内存管理器和其他东西。那么如果我们在 RAM 磁盘上运行 SQL Server 会发生什么?

  1. 我们失去了数据库的一致性。如果服务器发生故障,我们将丢失数据。SQL Server 在其标准配置中不会丢失已提交的数据。
  2. 我们最终将低效地使用内存,因为 SQL Server 将使用其缓冲池和各种缓存来存储已经在 RAM 中的数据。在最坏的情况下,您会将 SQL Server 限制为少于系统内存的 50%。大多数最终将用于存储数据库和/或日志文件,并且 SQL Server 仍会尝试将内容放入其内部优化的缓冲池中,并且缺乏足够的内存来缓冲内容。

第一个是最重要的。在发生故障时,RAM 磁盘上的 SQL Server 将不再具有事务一致性。其他任何事情对您来说都不重要,但我可以肯定地说,在 RAM 磁盘上运行 SQL Server 的数据库或日志文件没有任何技术上的好处可能会超过风险。