Quais são os consumidores de MPA (alocações de várias páginas) no SQL Server?
Eu sei que as páginas de dados são sempre 8K. Existe uma situação em que a página de dados/índice faz uso do MPA? Faz sentido que os planos de execução possam usar MPA, pois podem exceder 8 KB.
Existe um blog aqui que sugere o uso de MPA, mas se refere a stored procedures (uma com 500 parâmetros). Na captura de tela anexa, vejo um plano de execução usando cerca de 11 MB; isso usa MPA? Existe uma maneira de confirmar que a alocação de memória para o plano de execução está usando alocação de várias páginas?
Minha confusão é o que realmente usa o MPA (alocador de várias páginas). O exemplo no link que postei mostra um plano de execução complexo que exigirá alocação contígua de 8 KB.
Uma resposta abaixo sugere que há muitas coisas como servidor vinculado ou procedimentos armazenados estendidos que podem usar MPA. O que, por algum motivo, não consigo concordar. Por exemplo, procedimentos armazenados estendidos podem ser código C++ usando HeapAlloc, sobre o qual o servidor SQL tem pouco controle para gerenciar sua memória (deve estar no nível do sistema operacional Windows).
Os procedimentos armazenados estendidos, mesmo no SQL 2012, ainda consomem memória fora do pool de buffers, portanto, não têm nada a ver com alocação de várias páginas. O mesmo se aplica a servidores vinculados, especialmente se você usar provedores de terceiros (por exemplo, ORACLE).
No SQL Server 2008 R2 e anteriores, as seguintes alocações vêm da área MemToLeave (MTL):
MAXTRANSFERSIZE
Informações extraídas deste artigo pelo engenheiro de suporte da Microsoft Amit Banerjee.
O SQL Server 2012 usa o alocador de página de qualquer tamanho .
Mais informações estão incluídas neste artigo da Base de Dados de Conhecimento da Microsoft .
As alocações de várias páginas (MPA) também vêm da área MTL, antes do SQL Server 2012. Se uma alocação feita pelo SQL Server é feita por meio do MPA ou do alocador de página única (SPA), depende exclusivamente do tamanho da solicitação de alocação. Se tiver 8 KB ou menos, será alocado via SPA e roubado do buffer pool. Se for 8 KB ou mais, MPA é usado.
Não, os dados e as páginas de índice são sempre armazenados em cache no buffer pool.
Os planos em cache têm uma estrutura complexa . As alocações individuais dentro dessa estrutura são geralmente alocações de 8 KB, mas certas consultas (geralmente aquelas que contêm
IN
listas longas ou muitos parâmetros para uma chamada de procedimento armazenado) podem exigir uma alocação MPA. Estes são comparativamente raros. É possível consultar DMVs do SQL Server para determinar a divisão entre SPA e MPA para um plano em cache.