锁定页面与本机内存在 64 位 SQL2005/2008 上的性能

Sup*_*oss 2 memory 64-bit sql-server sql-server-2005 sql-server-2008

我知道在 64 位系统上将内存特权中的锁定页面设置为包含 SQL2005/2008 服务的服务帐户使用 AWE API 并有效地阻止 SQL 的缓冲池被分页到磁盘 - 提高稳定性。

但是,如果您有一个具有足够空闲内存的专用机器,那么您确信 SQL 不会分页 - 原生 SQL 64 位内存管理是否更快?

Ada*_*and 5

简短的回答是,如果使用得当,Lock Pages In Memory 可以提高 64 位系统上的 SQL Server 性能。

长长的答案让我们后退了几步。

首先,您需要了解分页和分页到磁盘之间是有区别的。在现代操作系统中,所有内存都在VAS(虚拟地址空间)内的页面分配。这不是一件坏事,这就是它的工作原理。

当不使用 Lock Pages 时,SQL Server 处理缓冲池内存的方式有两个问题

首先,分配内存的成本更高。当进程启动或请求更多内存时,操作系统会根据需要为其创建新页面。因此,通常,当 SQL Server 运行时,它会一直通过与操作系统聊天来请求、获取、释放页面,这很昂贵。

其次,NUMA 不能很好地工作。正确的 NUMA 支持意味着应用程序可以依赖物理内存中最接近线程所在处理器的页面,但是当操作系统接管分页时,SQL Server 无法保证这一点。它必须为每个页面请求检查 NUMA 驻留,这也很昂贵

当您在内存中启用锁定页面时,SQL Server 不必为缓冲池处理这些问题中的任何一个,因为它使用 AWE API 进行内存管理。

首先,当它请求内存时,它只请求一次,并且一次从操作系统获取一个页面列表。然后,将来,它可以根据需要分配这些页面,而无需向操作系统询问它们。

其次,因为它是从操作系统锁定页面,所以它知道这些页面的属性不会改变。所以如果页面是NUMA页面,它就会把它放在NUMA缓冲池中,而不必担心下次检查时验证它是否在NUMA中。

随着数据库的增加(发生内存分配时),以及随着时间的推移(通常 SQL Server 将处理操作系统以进行页面分配/释放时),您会注意到这些改进。

如果您想了解更多详细信息,请参阅Slava Oks 在 SQL Server 团队期间撰写的一篇出色的技术文章。他还有一篇关于该主题的问答帖子,另一篇关于NUMA 如何在 SQL Server 中工作的精彩文章。