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


13

Um de nossos servidores SQL, que está funcionando estável há algum tempo (anos), recentemente lançou erros de memória insuficientes. No log de eventos do aplicativo, vemos:

ID do Evento: 701

Descrição: a memória do sistema é insuficiente para executar esta consulta.

Nossa equipe que gerencia esse servidor é formada principalmente por desenvolvedores que dobram as tarefas do administrador de sistemas. No entanto, nossa principal experiência é desenvolvimento. Dito isto, estamos sem saber como solucionar esse problema. Temos vasculhado fóruns e outros enfeites e não encontramos nada que corresponda

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

  • Nossa memória mínima do servidor está definida como 0.
  • Nossa memória máxima do servidor está definida como 2000.
  • A memória física total é de 3.325,85 MB (do sysinfo).
  • A memória virtual total é de 7,10 GB (do sysinfo).
  • Não estávamos usando o 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 os sistemas SQL Server (2005 e 2000), Oracle 10g e OSI PI.
  • É intermitente neste momento. Parece que não conseguimos correlacionar nenhum momento ou evento com os erros.
  • Obviamente, a reinicialização parece fazer com que ela desapareça por um tempo, o que faz sentido devido à natureza da mensagem de erro.
  • Esse servidor triplica como servidor de aplicativos (alguns Serviços do Windows) e servidor da Web, além de servidor de banco de dados.

EDITAR:

Estamos no SP3. A maioria das postagens encontradas foi anterior 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


Você pode revisar o log de erros do SQL Server, pois pode haver detalhes adicionais sobre esse erro.
John Sansom

Respostas:


4

Eu sugeriria o uso do 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 seria 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 tenho a tendência de concordar com o UndertheFold no sentido de que um perfmon pode ser um bom começo.


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) indisponível e não à memória no sentido convencional, ou seja, no espaço de processo do SQL Server.

Como você está executando apenas 3 GB neste servidor e o SQL Server foi atribuído até 2 GB, isso significa que o sistema operacional e, mais importante, qualquer outra coisa na caixa tem menos de 1 GB para jogar. 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.

Eu sugeriria o uso do parâmetro -g startup 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.


Bom artigo. Obrigado por criar também! Temos vários AppDomains descarregando em nossos logs SQL. Temos apenas 2 procedimentos armazenados do CLR e eles basicamente apenas obtêm e colocam dados de / para um serviço da web. Parece estranho que esses 2 procedimentos armazenados do CLR usem muito VAS fora da caixa.
Aaron Daniels #

Seja bem-vindo. Como você deve saber, a alocação padrão para o memToLeave é de apenas 256 MB. Essa é uma pequena caixa de proteção para seus AppDomains, todo o código gerenciado / CLR, consultas de servidor vinculado, SSIS etc., especialmente se você estiver utilizando toda a memória disponível no servidor. Eu sugeriria dobrá-lo para 512 MB usando o parâmetro de inicialização -g.
21711 John Sansom

1

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

A seguir, é o que a Microsoft nos disse.

Aparentemente, o processamento de dados usando um servidor vinculado, especificamente, o driver fox pro causa vazamento de memória que se acumula ao longo do tempo.


0

Esse servidor triplica como servidor de aplicativos (alguns Serviços do Windows) e servidor da Web, além de 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 log de contador usando perfmon para confirmar isso e / ou fornecer mais informações para identificar qual é o problema real.


0

Referência retirada deste blog!

Existem diferentes alternativas para resolver esse problema.

Primeiro, verifique as configurações 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 no valor, aumente sua "memória máxima do servidor".

Segundo, descobri consultas de longa execução com suas informações de uso de memória e, se essa consulta estiver em estado inativo, verifique e elimine esse processo. A otimização do desempenho do banco de dados é essencial para o uso da memória.

Terceiro, descobrimos os usos do índice para consultas demoradas, porque sem a indexação adequada o aumento de E / S no DISCO do sistema e isso afeta diretamente a sua memória.

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

Quinto, verifique o tamanho da "memória mínima por consulta", na verdade, é 1024 KB por padrão, mas em raras situações você pode diminuir o tamanho desse 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, pois pode afetar o desempenho geral do servidor. Mas você pode tentar isso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.