Abbiamo un database con un carico di lavoro misto OLAP / OLTP. Le query sono abbastanza ad-hoc e vengono create dinamicamente nel server delle applicazioni di livello intermedio. Quando si avvia il server, le prestazioni sono abbastanza accettabili, ma il consumo di memoria aumenta sempre di più fino all'esaurimento di tutta la memoria disponibile (30 GB). Successivamente, il sistema diventa sempre più lento.
I comandi come Dbcc freeproccache
non hanno alcun effetto.
Non ci sono molte transazioni in select * from sys.dm_tran_session_transactions
(non più di quando il sistema va bene), alcune volte questo elenco è vuoto.
Il primo risultato di dbcc memorystatus
è
VM Reserved 42136628
VM Committed 1487176
Locked Pages Allocated 24994048
Reserved Memory 1024
Reserved Memory In Use 0
Un riavvio di SQL Server risolve il problema per un po '.
- Cosa causa questo comportamento? Come può essere evitato?
- Se una soluzione reale per la causa è troppo difficile, esiste un comando che impone a SQL Server di rilasciare effettivamente tutta la memoria senza un riavvio DBMS completo?
Il server è in esecuzione su hardware dedicato (non una macchina virtuale). Avevamo alcuni lavori programmati, ma li abbiamo disabilitati per un po ', senza modifiche. Esistono altre applicazioni di livello intermedio in esecuzione sullo stesso server, ma utilizzano non più di 2 GB di memoria, CPU trascurabile e quasi nessun I / O. Abbiamo riavviato tutte queste applicazioni senza alcuna modifica.