it-swarm-pt.tech

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

Um de nossos servidores SQL, que está funcionando de forma estável há algum tempo (anos), recentemente apresentou erros de memória insuficiente. No Log de eventos do aplicativo, vemos:

ID do evento: 701

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

Nossa equipe que gerencia este servidor é composta principalmente de desenvolvedores que se dobram nas funções de administrador de sistema. No entanto, nossa principal especialidade é o desenvolvimento. Dito isso, não sabemos como solucionar o problema. Temos vasculhado fóruns e outros enfeites e não encontramos nada que corresponda

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

  • Nossa memória mínima do servidor é definida como 0.
  • Nossa memória máxima do servidor está definida para 2.000.
  • A 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 AWE para alocar memória, mas agora vamos ver se isso faz diferença.
  • Este erro foi gerado 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 do outro lado são SQL Server (2005 e 2000), Oracle 10g e sistemas OSI PI.
  • É intermitente neste ponto. Parece que não podemos correlacionar qualquer momento ou evento aos erros.
  • Claro, a reinicialização parece fazer com que ele desapareça por um tempo, o que faz sentido devido à natureza da mensagem de erro.
  • Este servidor triplica como servidor de aplicação (alguns Windows Services) e servidor web, bem como servidor de banco de dados.

EDITAR:

Estamos no SP3. A maioria das postagens que encontramos eram anteriores ao 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

13
Aaron Daniels

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 512 MB, será apenas um período mais longo entre os problemas de memória? Não sei a resposta para isso, mas tendo a concordar com UndertheFold em que um perfmon pode ser um bom começo.

4
Mike Thien

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

Visto que você está executando apenas 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 tem menos de 1 GB para brincar. Isso não é muita memória.

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

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

Consulte o seguinte artigo para obter mais informações:

http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/

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

7
John Sansom

Isso pode estar relacionado a um vazamento de memória de um driver de servidor vinculado, de acordo com este tópico do fórum :

A seguir está o que a Microsoft nos disse.

Aparentemente, o processamento de dados usando um servidor vinculado, especialmente o driver fox pro, causa vazamento de memória que aumenta com o tempo.

1
splattne

Este servidor triplica como servidor de aplicação (alguns Windows Services) e servidor web, bem como servidor de banco de dados.

Eu definiria sua memória mínima - é bem possível que esses outros processos estejam "roubando" memória do SQL

Você pode executar um registro do contador usando o perfmon para confirmar isso e/ou fornecer a si mesmo mais informações para identificar qual é o verdadeiro problema.

0
CPU_BUSY

Referência tirada deste blog!

Existem diferentes alternativas para resolver este problema.

Primeiro, Verifique a configuração do SQL Server para “memória mínima do servidor” e “memória máxima do servidor”. Se você encontrou uma diferença muito pequena em ambos os valores, aumente sua “memória máxima do servidor”.

Em segundo lugar, Encontrou consultas de longa duração com suas informações de uso de memória e se esta consulta estiver ociosa, verifique e elimine este processo. A otimização do desempenho do banco de dados é um fator importante para o uso de memória.

Terceiro, Descobriu usos de índice para consultas de longa execução porque, sem a indexação adequada, seu sistema aumenta a E/S de DISCO e afeta diretamente 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 deste parâmetro . Na verdade, isso não é aconselhável, mas você pode tentar.

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

0
Anvesh