none
Server SQL 2008 R2 ( o SQL 2012) non rilascia la ram RRS feed

  • Domanda

  • Ciao, ho un problema con SQL server.

    Praticamente SQL si prende tutta la ram che c'e disponibile ( e questo è normale), solo che anche quando finisce l'attività non la rilascia e il server risulta lentissimo se non impossibilitato a eseguire altre operazioni.

    Unico rimedio è riavviare l'istanza.

    C'e modo di risolvere questo problema senza dover riavviare ogni volta l'istanza SQL?

    Grazie

    mercoledì 20 febbraio 2013 15:44

Risposte

Tutte le risposte

  • Ciao Simone..

    quanta ram ha il server e quanta effettivamente ne occupa l'istanza attiva?

    Sql server con l'installazione di default ha un sistema di rilascio della memoria che dialoga col sistema operativo, le pagine le rilascia solo se il sistema ha effettivamente bisogno di memoria, così in caso che i dati vengano richiesti nuovamente sono disponibili con una latenza inferiore.

    Volendo puoi limitare l'utilizzo di ram usando 

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'max server memory', [#MEMORY#];
    GO
    RECONFIGURE;
    GO

    A questa pagina trovi la reference di msdn sull'utilizzo della memoria.

    Tu dici che il server è inchiodato e non riesce a fare nient'altro.. se avessi impostato la memoria troppo bassa, sql inchioderebbe il processore per il continuo continuare a caricare e scaricare pagine, ma dici che usa molta memoria quindi non dovrebbe essere il caso.. 

    hai aggiornato il server all'ultimo service pack

    La cosa strana è che lo fà con entrambe le installazioni, 2008 R2 e 2012.. sicuro non sia altrove il collo di bottiglia? (:

    mercoledì 20 febbraio 2013 18:52
  • E aggiungo questo articolo di Ermanno Goletto, veramente un'ottima spiegazione.
    mercoledì 20 febbraio 2013 18:59
  • ciao Luca e grazie per la risposta.

    Da  quel che ho letto le impostazioni che sono descritte nei documenti ti indirizzano su come impostare la quantità di ram in maniera ottimale da evitare che venga utilizzata tuta da sql.

    Io ho visto che c'e un'opzione Lock Pages in Memory che non ho capito sinceramente a cosa serva.

    Io ho bisogno che sql si prenda la ram in maniera dinamica ma che la rilasci subito appena finisce di utilizzarla e che non aspetti che gli venga chiesta dal server.

    E' possibile impostare questa modalità?

    Il mio server è un 64bit 2008 r2 completamente aggiornato e ha 1 sola istanza sql 2012 (per il 2008 ho piu o meno lo stesso problema su un'altro server con 2 istanze).

    giovedì 21 febbraio 2013 15:20
  • Come descritto nell'articolo che ti ha consigliato Luca, l'impostazione Lock Pages in Memory permette solo di prevenire il paging dei dati nella memoria virtuale (su hard disk) forzando l'utilizzo della memoria fisica. Non è possibile impostare SQL Server in modo che rilasci la memoria allocata senza che la memoria di sistema libera non abbia raggiunto livelli bassi.
    giovedì 21 febbraio 2013 15:42
    Moderatore
  • E' un bel problema questo perche nei miei server io ho l'istanza di SQL sulla quale vengono lanciate query di estrazioni dati ,in oltre vengono effettuate connessioni e lanciati SSIS con anlysis services.

    SQL attualmente ha 15 gb di ram su 64, il resto se la prende Analysis Service quando viene eseguito.

    Il problema è che spesso SQL per le query che vengono lanciate avrebbe bisogno di molta piu ram altrimenti diventa lentissimo.

    Se aumento la ram massima di sql, la restante non è sufficente per Analysis Services che al posto di eseguirsi droppa tutti i db scrivendoli in locale.

    Solo dopo aver riavviato lil servizio e liberato la memoria scrive i db sulla sua istanza.

    giovedì 21 febbraio 2013 16:08
  • L'opzione Lock Pages in Memory è molto discussa online e pare che cambi la sua implementazione tra le varie edizioni di SQL Server. Da quanto so io impedisce la paginazione sul disco della memoria occupata ma onestamente è un'impostazione che non ho mai toccato.

    Questo articolo spiega tutto bene.

    Comunque, per tornare al troubleshooting, ho installato sql 2008 su server di tutti i tipi e onestamentenon ho mai avuto problemi di SQL Server che non rilascia memoria quando richiesta dal sistema. Faccio fatica a pensare che ti capiti in entrambi i sistemi e con entrambe le istanze con le impostazioni di default, specie per il fatto che hai server 2008 + sql 2008 aggiornati con le patch!

    Non è che magari smacchinando hai cambiato qualche impostazione tu? Scusami ma a volte uno non ci pensa ed invece era proprio il flagghettino maledetto che non ricordava di aver premuto.. :°)

    >>> CUT >>> non avevo refreshato la pagina!

    ###..quanta ram ha il tuo server? Non è che hai il disco in paginazione continua?###


    giovedì 21 febbraio 2013 16:34
  • Allora.. vedendo quanta ram hai allocato li in giro vien da pensare che devi scaricare quantità davvero ingenti di dati.. e di conseguenza magari puoi ovviare un po al problema :

    • Ottimizza le tue query se non lo hai già fatto
    • Piani di database manteinance
    • Inizia a usare i columnstore index se ne hai la possibilità
    • Pianifica estrazioni dati ad orari diversi
    • Controlla le operazioni di scrittura su disco che non fa mai male.. potrebbe esserci un collo di bottiglia da qualche parte!


    giovedì 21 febbraio 2013 16:43