none
Mancato utilizzo della RAM su SQL Server 2005 Enterprise a 64 bit RRS feed

  • Domanda

  • Ciao a tutti,

    ho un problema di uso di memoria ram su macchine windows 2003 a 64 bit con sql server 2005 enterprise a 64 bit con almeno 6 GB di RAM

    il problema e' il seguente:

    - lancio il comando exec sp_configure 'min server memory (MB)', 1500
    - lancio il comando exec sp_configure 'max server memory (MB)', 1500
    - lancio il comando reconfigure with override

    Mi aspetterei che il mio povero sql occupi 1,5 GB di memoria RAM.

    Invece mi ritrovo che pur lavorando da un po' di tempo la situazione dal task manager di windows e' di circa 100 MB al massimo.

    Siccome il server sql risponde lentamente, voreei capire se sto sbagliando qualcosa nel ragionamento o nella procedura.

    Lo user di partenza e' localsystem.

    E' un problema solo mio?

    Quanta memoria sta occupando realmente il mio sql server?

    Posso allocare la RAM al mio sql, anche se non gli serve?


    Grazie

    Stefano Ciaramella.

    • Modificato Anca Popa venerdì 3 dicembre 2010 08:30 titolo
    venerdì 6 novembre 2009 07:50

Risposte

  • avevo compreso che impostando un min e un max uguali avessi la certezza che il mio sql aveva a disposizione quella RAM e quindi, oltre a garantirmi un livello di funzionamento di SQL adeguato, mi garantisse dal fatto che SQL non mi occupasse tutta la RAM a disposizione, impedendo alla applicazione che sfrutta SQL e che si trova sullo stesso server di avere risorse di memoria; e' per questo motivo che non lascio gestire dinamicamente la memoria a sql.
    Ciao Stefano,

    Nel caso in cui una applicazione richieda un certo quantitativo di memoria non disponibile nel sistema, SQL Server rimuove automaticamente i vecchi piani di esecuzione e le data pages meno accedute in modo da rilasciare all'OS la memoria richiesta, quindi generalmente non occorre "blindare" la memoria massima utilizzabile dall'istanza.

    La cosa che non so, e' se c'e' una relazione tra il dato che trovo nell'occupazione di memoria nel task manager alla voce del processo sqlserver.exe e la voce che si trova nel Performance Monitor -> SQL Server Memory Manager -> Total Server Memory (KB).
    Total Server Memory: The committed memory from the buffer pool (in kilobytes).

    ms190924.note(en-us,SQL.100).gifNote:
    This is not the total memory used by SQL Server.

    Prova a leggere questo post che spiega l'utilizzo della memoria da parte di SQL Server.

    Per quanto riguarda la lentezza, visto che la memoria sembra funzionare in maniera coerente, quale e' il  modo migliore di vedere tramte i counter del performance monitor i tempi di risposta della componente disco del mio sistema?
    In questo caso utilizzerei il Profiler per identificare le query che superano una certa soglia espressa in secondi di tempo di esecuzione, catturando l'evento Showplan XML per visualizzare il piano di esecuzione. A questo punto se noto qualche inefficienza di troppo so dove intervenire :-)

    Ciao!
    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    venerdì 6 novembre 2009 20:43
    Moderatore

Tutte le risposte

  • ho un problema di uso di memoria ram su macchine windows 2003 a 64 bit con sql server 2005 enterprise a 64 bit con almeno 6 GB di RAM

    il problema e' il seguente:

    - lancio il comando exec sp_configure 'min server memory (MB)', 1500
    - lancio il comando exec sp_configure 'max server memory (MB)', 1500
    - lancio il comando reconfigure with override

    Mi aspetterei che il mio povero sql occupi 1,5 GB di memoria RAM.

    Ciao Stefano,

    Perché ti aspetti che SQL Server vada ad occupare subito 1,5GB di RAM?
    Dai Books Online: "In the first method, set min server memory and max server memory to the same value. This value corresponds to the fixed amount of memory to allocate to the SQL Server buffer pool after the value is reached.
    ...
    Use min server memory to guarantee a minimum amount of memory available to the buffer pool of an instance of SQL Server. SQL Server will not immediately allocate the amount of memory specified in min server memory on startup. However, after memory usage has reached this value due to client load, SQL Server cannot free memory from the allocated buffer pool unless the value of min server memory is reduced".

    C'è un motivo particolare che ti porta a disabilitare l'allocazione dinamica della memoria del Buffer Pool assegnando una soglia massima?
    Perché non lasci gestire la memoria dinamicamente a SQL Server?

    Siccome il server sql risponde lentamente, voreei capire se sto sbagliando qualcosa nel ragionamento o nella procedura.
    Cosa intendi con "risponde lentamente"?
    Hai verificato i piani di esecuzione delle query?
    Gli indici sono OK?
    Le statistiche sono aggiornate? 
    Posso allocare la RAM al mio sql, anche se non gli serve?
    Puoi impostare un limite minimo e massimo, ma la memoria NON verrà immediatamente allocata, lo sarà SOLO se serve veramente.
    Banalizzando, se hai un db di 100MB ed allochi 1,5GB, anche caricando tutte le data pages in RAM non arriverai mai a saturare quel valore.

    Ciao!
    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    venerdì 6 novembre 2009 09:43
    Moderatore
  • Ciao Lorenzo,

    avevo compreso che impostando un min e un max uguali avessi la certezza che il mio sql aveva a disposizione quella RAM e quindi, oltre a garantirmi un livello di funzionamento di SQL adeguato, mi garantisse dal fatto che SQL non mi occupasse tutta la RAM a disposizione, impedendo alla applicazione che sfrutta SQL e che si trova sullo stesso server di avere risorse di memoria; e' per questo motivo che non lascio gestire dinamicamente la memoria a sql.

    La cosa che non so, e' se c'e' una relazione tra il dato che trovo nell'occupazione di memoria nel task manager alla voce del processo sqlserver.exe e la voce che si trova nel Performance Monitor -> SQL Server Memory Manager -> Total Server Memory (KB).


    Per quanto riguarda la lentezza, visto che la memoria sembra funzionare in maniera coerente, quale e' il  modo migliore di vedere tramte i counter del performance monitor i tempi di risposta della componente disco del mio sistema?

    Grazie

    Stefano Ciaramella.



    venerdì 6 novembre 2009 16:10
  • avevo compreso che impostando un min e un max uguali avessi la certezza che il mio sql aveva a disposizione quella RAM e quindi, oltre a garantirmi un livello di funzionamento di SQL adeguato, mi garantisse dal fatto che SQL non mi occupasse tutta la RAM a disposizione, impedendo alla applicazione che sfrutta SQL e che si trova sullo stesso server di avere risorse di memoria; e' per questo motivo che non lascio gestire dinamicamente la memoria a sql.
    Ciao Stefano,

    Nel caso in cui una applicazione richieda un certo quantitativo di memoria non disponibile nel sistema, SQL Server rimuove automaticamente i vecchi piani di esecuzione e le data pages meno accedute in modo da rilasciare all'OS la memoria richiesta, quindi generalmente non occorre "blindare" la memoria massima utilizzabile dall'istanza.

    La cosa che non so, e' se c'e' una relazione tra il dato che trovo nell'occupazione di memoria nel task manager alla voce del processo sqlserver.exe e la voce che si trova nel Performance Monitor -> SQL Server Memory Manager -> Total Server Memory (KB).
    Total Server Memory: The committed memory from the buffer pool (in kilobytes).

    ms190924.note(en-us,SQL.100).gifNote:
    This is not the total memory used by SQL Server.

    Prova a leggere questo post che spiega l'utilizzo della memoria da parte di SQL Server.

    Per quanto riguarda la lentezza, visto che la memoria sembra funzionare in maniera coerente, quale e' il  modo migliore di vedere tramte i counter del performance monitor i tempi di risposta della componente disco del mio sistema?
    In questo caso utilizzerei il Profiler per identificare le query che superano una certa soglia espressa in secondi di tempo di esecuzione, catturando l'evento Showplan XML per visualizzare il piano di esecuzione. A questo punto se noto qualche inefficienza di troppo so dove intervenire :-)

    Ciao!
    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    venerdì 6 novembre 2009 20:43
    Moderatore