Desempenho incorreto quando o SQL Server atinge 99% de uso de memória

5

Eu tenho um servidor que reporta 8 GB de ram usado em 99%. Quando reiniciar o Sql Server, ele cai para cerca de 5% de uso, mas gradualmente volta a aumentar até 99% em cerca de 2 horas.

Quando eu olho para o processo do sqlserver, ele é relatado como usando apenas 100k de RAM, e geralmente nunca sobe ou fica abaixo desse número em muito. Na verdade, se eu somar todos os processos no meu TaskManager, é apenas arranhando a superfície do meu total disponível (ainda TaskManager ainda mostra 99% de uso de memória com "Todos os processos mostrados").

Parece que o Sql Server tem um enorme vazamento de memória, mas não está relatando isso. O servidor funcionou bem por quase dois anos, com isso apenas começando a se manifestar nas últimas 3-4 semanas.

Alguém viu isso ou teve alguma ideia do problema?

EDITAR

Quando o servidor atinge 99%, o desempenho cai. Todas as consultas ao servidor, aplicativos, etc. chegam a um rastreamento. Reiniciar o serviço torna as coisas zippy novamente, até 2 horas se passaram e o servidor atinge 99% mais uma vez.

    
por user2125551 15.03.2011 / 21:03

5 respostas

8

O SQL Server armazenará tantos dados quanto possível - o que é o que outros disseram uma coisa boa. Esses dados em cache são chamados de cache de buffer - mas é necessário limitar isso.

Então, o que você precisa fazer para corrigir isso é limitar o tamanho do cache de buffer . A regra prática é (Total_RAM - (2GB ou 10% (o que for maior)) = Cache máximo do buffer.Se você não limitar o tamanho desse cache, o servidor poderá começar a pressionar a memória conforme o sistema operacional e o SQL Você pode encontrar essa configuração na seção de memória das propriedades do SQL Server no Management Studio:

Vejaaspráticasrecomendadasdememóriaem Lista de verificação de implementação do SQL Server do Brent Ozar na parte ii para mais detalhes sobre isso.

Como isso começou a acontecer recentemente, meu palpite é que alguém fez algo para criar concorrência de memória com o SQL Server instalando ou executando outro software.

Por fim, se você quiser ver a quantidade de memória que o SQL Server está realmente usando para o buffer pool, consulte o contador SQL Server Memory Manager: Total Server Memory perfmon. Essa é a quantidade de memória que o conjunto de buffers está usando (não a memória total do servidor). Taskman não mostrará esta memória.

    
por 15.03.2011 / 21:45
5

O motivo pelo qual ele não está aparecendo no Gerenciador de Tarefas é que ele está usando o AWE, que bloqueia e aloca páginas na memória. Isso torna importante definir a memória máxima do servidor, pois a memória não é paginável. link

    
por 16.03.2011 / 01:19
1

Não é um vazamento; Este é o SQL deve funcionar. Ele pega toda a memória RAM que pode. SQL é algo que deve definitivamente ser o único aplicativo na caixa, por esse motivo, entre outros. Se você realmente precisava limitá-lo, eu acredito que você pode fazer isso, mas o céu te ajuda se o SQL precisar de mais RAM do que você definiu seu limite.

    
por 15.03.2011 / 21:10
1

Sim, é provável que seja SQL, e algo pode ter mudado para seus padrões de uso de conexões SQL. Acredito que o SQL só inicia o cache de dados SQL na RAM quando esses dados são solicitados, então talvez você tenha recebido mais solicitações recentemente. A menos que você tenha um desempenho ruim de SQL, eu presumo que esteja fazendo o que deveria.

    
por 15.03.2011 / 21:18
1

Não sei por que esse comportamento teria mudado nas últimas semanas, mas parece que o SQL Server está se comportando conforme planejado. Ele normalmente armazenará a quantidade de memória permitida até o limite máximo de memória do servidor, liberando-o apenas se algum outro processo precisar realmente dele. O ponto em que você acha que o SQL deve abandonar a RAM e o tempo em que o SQL acha que deve abandonar a RAM obviamente não estão em sincronia. Isso é bom e não é fora do comum, é por isso que existem controles para você esclarecer isso. Defina o parâmetro de memória máxima do servidor para permitir que o sistema operacional e aplicativos backround alguma RAM e você vai ficar bem.

Veja uma postagem esclarecedora para ajudar na sua compreensão - link

Além disso, confira o número 3 nesta página para ver por que o Gerenciador de Tarefas é a ferramenta errada a ser usada ao verificar o uso de memória do x64 SQL Server - link

    
por 15.03.2011 / 21:14