Uso de memória do SQL 2008

3

Eu tenho um SQL Server 2008 (ver 10.0.1600) em execução em um servidor Windows Server 2008 R2 Enterprise com 8 GB de RAM física. Se eu abrir o Gerenciador de Tarefas, posso ver na seção 'Memória Física' da guia 'Desempenho' que apenas 340 MB estão Disponíveis no Total de 8191, mas não consigo ver nenhum processo usando essa quantidade de memória. Observe que o SQL Server tem memória limitada a 6 GB (memória máxima do servidor = 6000).

Se eu abrir o Sysinternals Process Explorer, posso ver que sqlsrvr.exe process tem:

Private Bytes:  227.000 K
Working Set:    140.000 K
Virtual Size: 8.762.000 K

O que isso significa? Existe alguma maneira de liberar essa memória para outro processo? Por que o tamanho virtual figura como memória alocada? Eu pensei que o Virtual Size era apenas 'memória reservada'.

    
por Danilo Brambilla 17.02.2011 / 12:36

2 respostas

8

Isso é normal. O SQL Server sempre usará toda a memória disponível e será redimensionado quando o sistema precisar de mais recursos.

ESTE artigo descreve o que está acontecendo.

When you start SQL Server, SQL Server memory usage may continue to steadily increase and not decrease, even when activity on the server is low. Additionally, the Task Manager and Performance Monitor may show that the physical memory available on the computer is steadily decreasing until the available memory is between 4 to 10 MB.

This behavior alone does not indicate a memory leak. This behavior is normal and is an intended behavior of the SQL Server buffer pool.

By default, SQL Server dynamically grows and shrinks the size of its buffer pool (cache) depending on the physical memory load reported by the operating system. As long as enough memory is available to prevent paging (between 4 - 10 MB), the SQL Server buffer pool will continue to grow. As other processes on the same computer as SQL Server allocate memory, the SQL Server buffer manager will release memory as needed. SQL Server can free and acquire several megabytes of memory each second, allowing it to quickly adjust to memory allocation changes.

    
por 17.02.2011 / 14:00
1

Devido à maneira como o SQL Server aloca memória (principalmente com o AWE habilitado), o Gerenciador de Tarefas e o Process Explorer não fornecem uma indicação precisa da quantidade de RAM usada. Para obter os números adequados, você precisa perguntar diretamente ao SQL Server. A maneira mais fácil de fazer isso é executar o perfmon e adicionar o contador SQLServer: Memory Manager / Total Server Memory. Esse contador relatará o uso total de memória em KB.

Agora, se o SQL Server estiver usando os 6000 MB completos aos quais está limitado, o comportamento é perfeitamente normal (e desejável). Se estiver usando substancialmente mais do que isso, pode haver um problema.

    
por 17.02.2011 / 15:48