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