Memory To Leave

               O MemToLeave é parte do espaço de endereçamento virtual que o SQL Server reserva fora do buffer pool, para atender alocações maiores do que 8 KB, ou que sejam originadas de componentes como CLR, linked servers, extended stored procedures, etc. Esta reserva ocorre em 32 bits, mas não ocorre sob 64 bits.     

Como determinar a quantidade total e livre da MemToLeave?

                No SQL 2000 onde não existiam as DMV’s, era extremamente difícil estimar o tamanho da MTL usando o clássico DBCC MEMORYSTATUS (olhando sua 4ª sessão de resultados), a forma que se utilizava para capturar a informação era através do executável vmstat, a ferramenta pode ser baixada em:


                    No SQL 2005/08/R2 você pode utilizar a query abaixo:

WITH VAS_Summary
 AS ( SELECT Size = VAS_Dump.Size,
       Reserved = SUM(CASE ( CONVERT(INT, VAS_Dump.Base) ^ 0 )
                WHEN 0 THEN 0
                ELSE 1
                END),
      Free = SUM(CASE ( CONVERT(INT, VAS_Dump.Base) ^ 0 )
                WHEN 0 THEN 1
                ELSE 0
                END)
        FROM       ( SELECT CONVERT(VARBINARY, SUM(region_size_in_bytes)) [Size],
                             region_allocation_base_address [Base]
        FROM   sys.dm_os_virtual_address_dump
                     WHERE  region_allocation_base_address <> 0x0
        GROUP  BY region_allocation_base_address
                     UNION
        SELECT CONVERT(VARBINARY, region_size_in_bytes) [Size],
                           region_allocation_base_address [Base]
        FROM   sys.dm_os_virtual_address_dump
                     WHERE  region_allocation_base_address = 0x0
      ) AS VAS_Dump
               GROUP BY Size
   )

SELECT SUM(CONVERT(BIGINT, Size) * Free) / 1024 AS [Total avail mem, KB],
 CAST(MAX(Size) AS BIGINT) / 1024 AS [Max free size, KB]
 FROM VAS_Summary
 WHERE Free <> 0

Como manipular o tamanho da MemToLeave?

                Para definir tamanhos maiores ao MemToLeave você pode utilizar o parâmetro de inicialização –g, por padrão seu tamanho é de 256 MB, valores configurados abaixo de 256 MB serão ignorados e o SQL irá assumir o valor de 256 MB, na plataforma 64 bit este parâmetro não surtira nenhum efeito.

                Não me estendi muito no assunto por ser digamos uma preocupação maior nas versões antigas do produto rodando em uma plataforma 32 bits, porém parte da informação foi extraída do artigo do Jonathan Kehayias, caso queiram mais detalhes é só acessar através do link abaixo:


Espero que tenham gostado! Até o próximo post! =)

Nenhum comentário:

Postar um comentário