在我的一个应用程序中,我有一个 1GB 的数据库表,用于参考数据。该表有大量读取,但没有写入。我想知道是否有任何方法可以将数据加载到 RAM 中,以便不必从磁盘访问数据?

我正在使用 SQL Server 2005

有帮助吗?

解决方案

如果您有足够的 RAM,SQL 将出色地确定将哪些内容加载到 RAM 中以及在磁盘上查找哪些内容。

这个问题被问了很多次,它让我想起人们试图手动设置他们的进程将在哪个“核心”上运行——让操作系统(或者在本例中是数据库)执行其设计目的。

如果您想验证 SQL 是否确实从缓存中读取查找数据,那么您可以启动负载测试并使用 Sysinternals 文件星期一, 流程浏览器过程监控器 验证 1GB 表未被读取。出于这个原因,我们有时将“查找”数据放在一个单独的文件组中,以便在磁盘上访问它时很容易进行监视。

希望这可以帮助。

其他提示

您会想看看 memcached。这是许多大型(且规模较大)网站用来处理此类问题的方法。如果您有一些备用服务器,您可以轻松设置它们以将大部分数据保存在内存中。

http://en.wikipedia.org/wiki/Memcached

http://www.danga.com/memcached/

http://www.socialtext.net/memcached/

只是为了澄清 sql2005 及更高版本的问题:

此功能是在SQL Server版本6.5中引入的。DBCC品脱具有高度不必要的副作用。其中包括损坏缓冲池的潜力。不需要DBCC品脱,并且已被删除以防止其他问题。此命令的语法仍然有效,但不影响服务器。

DBCC 可打印 如果您想确保表保持缓存状态,将显式地将表固定在核心中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top