将只读数据库表加载到内存中

时间:2008-09-04 00:47:00

标签: sql-server sql-server-2005 caching

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

我正在使用SQL Server 2005

4 个答案:

答案 0 :(得分:5)

如果你有足够的内存,SQL将会做出出色的工作,确定要加载到RAM中的内容以及要在磁盘上搜索的内容。

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

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

希望这有帮助。

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

只是为了澄清sql2005及以上的问题:

  

引入了此功能   SQL Server 6.5版中的性能。   DBCC PINTABLE非常不受欢迎   副作用。这些包括   可能会破坏缓冲池。   DBCC PINTABLE不是必需的并且有   被删除以防止额外的   问题。此命令的语法   仍然有效,但不影响   服务器

答案 3 :(得分:-1)

如果你想确保它仍然被缓存,

DBCC PINTABLE会明确地在核心中固定一个表。