Temos uma máquina dedicada do SQL Server 2008 R2 que está enfrentando alguns problemas estranhos de memória. A máquina possui muitos recursos, incluindo dois processadores quad-core, 16 GB de RAM e Windows Server 2008 R2 Enterprise de 64 bits (é um Dell PowerEdge 2950) .
O estranho problema é que o sistema está relatando 82% da memória em uso, mas o sqlservr.exe está relatando apenas 155mb em uso. A razão pela qual suspeito que o SQL Server é o problema é que, se eu reiniciar o processo sqlservr.exe, o consumo de memória retornará ao normal por um período de tempo.
Alguém tem alguma idéia de como posso começar a rastrear esse problema?
Obrigado Jason
sql-server-2008-r2
memory
process
typefragger
fonte
fonte
Respostas:
Você não obterá uma imagem verdadeira do uso de memória no Gerenciador de Tarefas se a conta em que o serviço estiver sendo executado tiver o privilégio de páginas bloqueadas na memória (edite: conforme comentário / link de Mark Rasmussen). Para determinar quanta memória está sendo usada, você pode observar:
Não me lembro se existe uma DMV ou uma combinação disso que lhe dará a alocação total de memória, mas o seguinte mostrará a maior parte.
O segundo é o mais interessante, geralmente, alocações de buffer pool por banco de dados. É aqui que o compartilhamento do Lions será usado e pode ser útil entender quais dos seus bancos de dados são os maiores consumidores.
fonte
Há um artigo recente de nosso próprio Brent Ozar que trata desse caso, quando o Gerenciador de Tarefas não mostra corretamente a memória consumida pelo SQLServer e seus serviços adicionais. Você pode encontrá-lo aqui: Guia do Sysadmin para memória do Microsoft SQL Server .
Citação: " Por que o SQLServer.exe não está usando muita memória?
Quando você remota a área de trabalho em um servidor e olha para o Gerenciador de Tarefas, o Uso de Memórias do sqlservr.exe sempre parece maluco. Isso não é culpa do SQL Server. O Gerenciador de tarefas é um mentiroso sujo e imundo. (Eu sei, parece que o cara do SQL está mudando a culpa, mas aceite comigo por um segundo.) Nas caixas de 64 bits, esse número é um pouco mais preciso, mas nas caixas de 32 bits, é completamente fora da base . Para realmente obter uma imagem precisa da quantidade de memória que o SQL Server está usando, você precisa de uma ferramenta como o Process Explorer e identifica todos os processos do SQL Server. No servidor que estou mostrando à direita, há duas instâncias do SQL Server (mostradas por sqlservr.exe), mais as ferramentas de backup do SQL Agent, do SQL Browser e do SQL Server. Não é incomum ver também o SQL Server Analysis Services, o Integration Services e o Reporting Services também em execução no mesmo servidor - os quais consomem memória.
Então, quanta memória o SQL está usando? Eu vou facilitar as coisas para você. O SQL Server está usando toda a memória. Período."
Portanto, recomendo que você tente a consulta de Mark e use uma ferramenta melhor para o relatório de memória. Ou apenas confie no Perfmon para relatar memória, não no Gerenciador de tarefas.
fonte
A quantidade de memória usada pelo SQL, conforme mostrado no gerenciador de tarefas, será principalmente a configuração de memória máxima. É assim que a configuração mínima / máxima funciona:
Quando o SQL server é iniciado, ele começa a levar a memória até a configuração de min-memory. À medida que suas necessidades SQL aumentam, o SQL começará a usar mais memória até a configuração de memória máxima. A memória permanece nesse ponto (máximo) mesmo quando o uso do SQL diminui. Isso dá a impressão de que o SQL executa grandes tarefas e consome muita memória. Na realidade, essa memória é reservada pelo SQL.
Quando houver pressão de memória não SQL no servidor, o SQL liberará a memória até o ponto de configuração da memória mínima. É assim que as configurações de memória são usadas. Você pode usar os scripts de Mark para ver como o SQL está usando essa memória.
fonte