在我的一个应用程序中,我有一个用于参考数据的 1gb 数据库表。它有大量的读取来自该表,但从来没有写入。我想知道是否有任何方法可以将数据加载到 RAM 中,从而不必从磁盘访问它?
我正在使用 SQL Server 2005
在我的一个应用程序中,我有一个用于参考数据的 1gb 数据库表。它有大量的读取来自该表,但从来没有写入。我想知道是否有任何方法可以将数据加载到 RAM 中,从而不必从磁盘访问它?
我正在使用 SQL Server 2005
如果您有足够的 RAM,SQL 将出色地确定要加载到 RAM 中的内容以及要在磁盘上查找的内容。
这个问题被问了很多,它让我想起了人们试图手动设置他们的进程将在哪个“核心”上运行——让操作系统(或者在这种情况下是数据库)完成它的设计目的。
如果您想验证 SQL 是否确实在从缓存中读取您的查找数据,那么您可以启动负载测试并使用 Sysinternals FileMon、Process Explorer和Process Monitor来验证没有从 1GB 表中读取。出于这个原因,我们有时将“查找”数据放在单独的文件组中,以便在磁盘上访问时非常容易监控。
希望这可以帮助。
你会想看看 memcached。这就是许多大型(且规模庞大)的网站用来处理此类问题的方式。如果您有一些备用服务器,您可以轻松设置它们以将大部分数据保存在内存中。
http://en.wikipedia.org/wiki/Memcached
只是为了澄清 sql2005 及更高版本的问题:
在 SQL Server 6.5 版中引入了此功能以提高性能。DBCC PINTABLE 具有非常有害的副作用。这些包括损坏缓冲池的可能性。DBCC PINTABLE 不是必需的,已将其删除以防止出现其他问题。此命令的语法仍然有效,但不影响服务器。
如果您想确保它保持缓存状态,DBCC PINTABLE将显式地将表固定在核心中。