内存中的SQL Server 2005"Pin"数据

El *_*ark 1 sql memory-management sql-server-2005 query-optimization

我们在仅运行SQL Server 2005的专用盒子上运行我们的应用程序数据库.这个DB服务器有32 Gb的RAM ...而数据库文件本身只有6 Gb.

我想强制几个重读/查询表进入SQL内存缓冲区以提高速度.

我知道SQL服务器非常适合在从磁盘读取数据后将必要的数据保存在内存中......但是我们的客户可能更喜欢他们的查询在第一时间快速运行." 第二次最快的表现"并不是产品亮点.

缺少旧的"Pin Table"DBCC命令..有什么想法吗?

我编写了一个"CacheTableToSQLMemory"Proc,它循环遍历所有表的索引(Clustered&Non),在Temp表中执行"Select*".我已经安排SQL Agent每15分钟运行一次"缓存大量表",试图将页面保留在内存中.

它在很大程度上工作..但即使在我缓存了所有查询的相关表之后,运行查询仍然增加了该表的缓存页数.然后它第二次更快.想法?

我们正在运行PAE和AWE.SQL设置为使用8到20 GB的RAM.

Rem*_*anu 6

x86瓶颈是你真正的问题.AWE只能为数据页提供服务,因为它们可以映射到AWE区域内外,但每隔一个内存分配必须填入2GB的进程虚拟地址空间.这将包括每个线程堆栈,所有代码,当前从AWE使用的所有数据,以及最重要的是,每个缓存的计划,执行计划,缓存的安全令牌,缓存的元数据等等.我甚至不计算CLR,我希望你不要使用它.

鉴于系统有32GB的RAM,你甚至不能尝试/ 3GB,看看是否有帮助,因为在这种情况下总PAE减少到16GB,这将使你的一半RAM不可见......

你真的必须转向x64.AWE可以帮助那么多.您可以从缓冲区管理器内存管理器对象中收集性能计数器并监视sys.dm_os_memory_clerks,这样您就可以更好地了解实例内存的行为方式(使用的内存在哪里,谁在使用它等).我不认为这会帮助你真正解决问题,但我确实希望它能为你提供足够的信息来为x64升级.