SQL*_*ner 5 sql-server sql-server-2008-r2
SQL Server 中 MPA(多页分配)的使用者是什么?
我知道数据页总是 8K。是否存在数据/索引页使用 MPA 的情况?执行计划可以使用 MPA 是有道理的,因为它们可以超过 8 KB。
有一个博客这里是建议使用MPA,但它指的是存储过程(一个500个参数)。在附加的屏幕截图中,我看到一个使用大约 11 MB 的执行计划;这使用 MPA 吗?有没有办法确认执行计划的内存分配正在使用多页分配?

我的困惑是实际使用 MPA(多页分配器)的原因。我发布的链接中的示例显示了一个复杂的执行计划,它将需要超过 8 KB 的连续分配。
下面的答案表明有很多东西可以使用 MPA,例如链接服务器或扩展存储过程。出于某种原因,我不能同意。例如,扩展存储过程可以是使用 HeapAlloc 的 C++ 代码,SQL 服务器几乎无法控制它来管理其内存(它必须在 Windows 操作系统级别)。
即使在 SQL 2012 中,扩展存储过程仍然消耗缓冲池之外的内存,因此它与多页分配无关。这同样适用于链接服务器,尤其是当您使用第三方提供商(例如 ORACLE)时。
在 SQL Server 2008 R2 及更早版本中,以下分配来自 MemToLeave (MTL) 区域:
MAXTRANSFERSIZEMicrosoft 支持工程师 Amit Banerjee从本文中提取的信息。
SQL Server 2012 使用Any Size Page Allocator。
此 Microsoft 知识库文章中包含更多信息。

多页分配 (MPA) 也来自 SQL Server 2012 之前的 MTL 区域。 SQL Server 进行的分配是通过 MPA 还是单页分配器 (SPA) 进行的,完全取决于分配请求的大小。如果小于等于 8KB,则通过 SPA 分配并从缓冲池中窃取。如果是 8KB 或更多,则使用 MPA。
我知道数据页总是 8K 那么是否存在数据/索引页使用 MPA 的情况?
不,数据和索引页总是缓存在缓冲池中。
有没有办法确认执行计划的内存分配正在使用多页分配?
缓存计划具有复杂的结构。该结构中的单个分配通常为 8KB 分配,但某些查询(通常包含长IN列表或存储过程调用的许多参数的查询)可能需要 MPA 分配。这些比较少见。可以查询 SQL Server DMV以确定缓存计划的 SPA 和 MPA 之间的拆分。
| 归档时间: |
|
| 查看次数: |
2552 次 |
| 最近记录: |