将只读数据库表加载到内存中
时间:2020-03-05 18:47:24 来源:igfitidea点击:
在我的一个应用程序中,我有一个用于参考数据的1gb数据库表。该表有大量读取,但从未写入。我想知道是否有任何方式可以将数据加载到RAM中,从而不必从磁盘访问数据?
我正在使用SQL Server 2005
解决方案
回答
我们将要看一下memcached。这就是许多庞大(规模合理)的站点用来处理此类问题的原因。如果我们有一些备用服务器,则可以轻松地对其进行设置,以将大多数数据保留在内存中。
http://en.wikipedia.org/wiki/Memcached
http://www.danga.com/memcached/
http://www.socialtext.net/memcached/
回答
如果我们有足够的RAM,SQL将做出出色的工作来确定要加载到RAM中的内容以及在磁盘上查找的内容。
这个问题被问了很多,它使我想起人们试图手动设置其进程将在哪个"核心"上运行-让OS(或者本例中的DB)执行其设计目的。
如果要验证SQL实际上是从缓存中读取查询数据,则可以启动负载测试并使用Sysinternals FileMon,Process Explorer和Process Monitor来验证是否未从中读取1GB表。因此,有时我们会将"查找"数据放在单独的文件组中,这样就很容易监视何时在磁盘上对其进行访问。
希望这可以帮助。
回答
如果我们想确保表仍保持缓存状态,则DBCC PINTABLE将显式地将表固定在核心中。
回答
只是为了阐明sql2005及更高版本的问题:
This functionality was introduced for performance in SQL Server version 6.5. DBCC PINTABLE has highly unwanted side-effects. These include the potential to damage the buffer pool. DBCC PINTABLE is not required and has been removed to prevent additional problems. The syntax for this command still works but does not affect the server.