SQL Server 2005: Não há memória de sistema insuficiente para executar essa consulta

13

Um dos nossos SQL Servers, que tem estado estável por algum tempo (anos), tem lançado recentemente erros de memória insuficientes. No log de eventos do aplicativo, vemos:

ID do evento: 701

Descrição: não há memória de sistema suficiente para executar essa consulta.

Nossa equipe que gerencia esse servidor é formada principalmente por desenvolvedores que dobram as tarefas do administrador de sistema. No entanto, nossa principal experiência é o desenvolvimento. Dito isto, estamos perdidos em como resolvemos isso. Nós temos vasculhado fóruns e outras coisas e não encontramos nada que corresponda a

Então, aqui estão mais alguns detalhes para ajudar na solução de problemas:

  • Nossa memória mínima do servidor está configurada para 0.
  • Nossa memória máxima do servidor está configurada para 2000.
  • Memória física total é de 3.325,85 MB (de sysinfo).
  • A memória virtual total é de 7,10 GB (de sysinfo).
  • Não estávamos usando o AWE para alocar memória, mas agora vamos ver se isso faz diferença.
  • Este erro foi lançado por um trabalho que estava fazendo backup de um log de transações, não executando uma consulta.
  • Temos muitos servidores vinculados. Os tipos de RDBMS no outro lado são os sistemas PI do SQL Server (2005 e 2000), Oracle 10g e OSI.
  • É intermitente neste momento. Não podemos correlacionar qualquer momento ou evento com os erros.
  • É claro que a reinicialização parece fazer isso desaparecer por um tempo, o que faz sentido devido à natureza da mensagem de erro.
  • Este servidor triplica como um servidor de aplicativos (alguns Serviços do Windows) e um servidor da Web, bem como o servidor de banco de dados.

EDITAR:

Estamos no SP3. A maioria das postagens que encontramos foram pré SP1, o que não se aplica a nós.

SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

retorna

9.00.4035.00 SP3 Standard Edition

    
por Aaron Daniels 20.05.2009 / 20:56

5 respostas

4

Eu sugeriria usar o parâmetro de inicialização -g também. Parece funcionar para a maioria das pessoas e provavelmente funcionará para você também. Minha única preocupação é que o problema subjacente não seja resolvido. Por exemplo, se houver um vazamento de memória devido a um servidor vinculado, e o MTL for aumentado para 512Mb, será apenas um período mais longo entre os problemas de memória? Eu não sei a resposta para isso, mas eu tendem a concordar com UndertheFold em que um perfmon pode ser um bom começo.

    
por 22.05.2009 / 20:45
7

A mensagem de erro "Não há memória do sistema suficiente para executar esta consulta." refere-se ao espaço de endereço virtual (VAS) não disponível e não à memória no sentido convencional, ou seja, dentro do espaço de processo do SQL Server. / p>

Dado que você está executando apenas com 3 GB neste servidor e o SQL Server foi atribuído a até 2 GB, isso significa que o sistema operacional e, mais importante, qualquer outra coisa na caixa possui menos de 1 GB para ser usado. Isso não é muita memória.

Se esse problema for realmente o resultado de um vazamento de memória, será o VAS fora do espaço de processo do SQL Server (memToLeave) que está sendo consumido.

Sugiro usar o parâmetro de inicialização -g para atribuir mais memória à parte memToLeave.

Veja o seguinte artigo para mais informações:

link

Você também pode querer reduzir a configuração máxima de memória do SQL Server, mas eu faria isso como último recurso.

    
por 21.05.2009 / 11:21
1

Isso pode estar relacionado a um vazamento de memória de um driver de servidor vinculado, de acordo com este discussão de fóruns :

The following is what Microsoft told us.

Apparently processing data using a linked server specifially the fox pro driver causes memory leakage which builds up over time.

    
por 20.05.2009 / 21:45
0

This server triples as an application server (a couple of Windows Services) and a web server, as well as the database server.

Gostaria de definir sua memória mínima - é bem possível que esses outros processos estejam "roubando" a memória do SQL

Você pode executar um contador usando o perfmon para confirmar isso e / ou fornecer mais informações para identificar qual é o problema real.

    
por 20.05.2009 / 22:53
0

Referência retirada deste blog!

Existem alternativas diferentes para resolver este problema.

Primeiro, Verifique a configuração do seu SQL Server para “min server memory” e “max server memory”. Se você encontrou diferenças muito pequenas em ambos os valores, aumente sua “memória máxima do servidor”.

Segundo, Descobrimos consultas de longa duração com suas informações de uso de memória e, se essa consulta estiver inativa, verifique e mate esse processo. A otimização do desempenho do banco de dados é importante para os usos da memória.

Terceiro, Descobriu os usos do índice para consultas de longa duração porque, sem a indexação adequada, o E / S do DISK do sistema aumenta e afeta diretamente a sua memória.

Quarto, Verifique o tamanho do arquivo de paginação da memória virtual e aumente o tamanho deste arquivo.

Quinto, Verifique o tamanho da "memória mínima por consulta", na verdade, é por padrão 1024 KB, mas em raras situações você pode diminuir o tamanho desse parâmetro. Na verdade, isso não é aconselhável, mas você pode tentar.

Sexta, Tente executar este comando DBCC e, novamente, isso não é aconselhável, pois pode afetar o desempenho geral do servidor. Mas você pode tentar isso.

    
por 28.02.2016 / 07:56