Temos um banco de dados com uma carga de trabalho OLAP / OLTP mista. As consultas são bastante ad-hoc e são criadas dinamicamente no servidor de aplicativos de camada intermediária. Quando iniciamos o servidor, o desempenho é bastante aceitável, mas o consumo de memória aumenta cada vez mais até que toda a memória disponível (30 GB) se esgote. Depois disso, o sistema fica cada vez mais lento.
Comandos como Dbcc freeproccache
não têm efeito.
Não há muitas transações select * from sys.dm_tran_session_transactions
(não mais do que quando o sistema está bom); algumas vezes essa lista está vazia.
O primeiro resultado de dbcc memorystatus
é
VM Reserved 42136628
VM Committed 1487176
Locked Pages Allocated 24994048
Reserved Memory 1024
Reserved Memory In Use 0
Uma reinicialização do SQL Server resolve o problema por um tempo.
- O que causa esse comportamento? Como isso pode ser evitado?
- Se uma solução real para a causa for muito difícil, existe um comando que força o SQL Server a liberar toda a memória sem uma reinicialização completa do DBMS?
O servidor está sendo executado em hardware dedicado (não em uma VM). Tínhamos alguns trabalhos agendados, mas os desativamos por um tempo, sem alterações. Existem outros aplicativos de camada intermediária em execução no mesmo servidor, mas eles usam não mais que 2 GB de memória, CPU desprezível e quase nenhuma E / S. Reiniciámos todos esses aplicativos sem alterações.