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
fonte
Respostas:
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.
fonte
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.
fonte
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 :
fonte
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.
fonte
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.
fonte