1

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

我正在使用 SQL Server 2005

4

4 回答 4

5

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

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

如果您想验证 SQL 是否确实在从缓存中读取您的查找数据,那么您可以启动负载测试并使用 Sysinternals FileMonProcess ExplorerProcess Monitor来验证没有从 1GB 表中读取。出于这个原因,我们有时将“查找”数据放在单独的文件组中,以便在磁盘上访问时非常容易监控。

希望这可以帮助。

于 2008-09-04T03:21:51.950 回答
2

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

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

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

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

于 2008-09-04T00:51:14.150 回答
1

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

在 SQL Server 6.5 版中引入了此功能以提高性能。DBCC PINTABLE 具有非常有害的副作用。这些包括损坏缓冲池的可能性。DBCC PINTABLE 不是必需的,已将其删除以防止出现其他问题。此命令的语法仍然有效,但不影响服务器。

于 2008-10-02T08:56:45.973 回答
-1

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

于 2008-09-18T21:39:16.980 回答