locked
Problemas de memoria en mi servidor SQL Server

    Question

  • Hola, tengo un problema con mi servidor, es un servidor dedicado a sql server el cual tiene dos instancias, la primera tiene 3 gigas y la segunda tiene 1 giga asignados, el servidor tiene 8 gigas de memoria.

    El sql server instalado es sql server 2008.

    Cuando inician el servidor, tiene 4.5 gigas de memoria utilizado, pero conforme pasan los dias esta memoria va aumentando, y ya no podemos recuperarla, hasta llegar a un punto que se reinicia el servidor.

    La primera instanacia tiene varias replicaciones ( 9 Transaccionales  y 26 de mezcla), la segunda instancia no tiene replicaciones.

    Ya hice varias modificaciones en las replicas para que no consuman el ancho de banda y no consuman muhca memoria porque antes duraba sólo 1 dia la memoria y con los cambios (Asigné periodisidad de en las replicas ya no son continuas, utilice un perfil para e agente de distribución aumentando el polin interval) dura de 4 a 5 dias.

    Alguien, me podria indicar por donde deberé buscar una solución para este problema.

    Monday, March 29, 2010 4:51 PM

Answers

  • Hola.

    En general, SQL Server nunca liberará la memoria y en caso de necesidad competirá por ella. Si el servidor va a tener más roles además de los de SQL Server (lo cual parece claro, ya que hay otros 4Gb que no se le asignan y con 2 para el sistema operativo sería suficientes), sería aconsejable que le reservaras un mínimo a cada instancia, que incluso debería ser igual al de la memoria máxima.

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Monday, March 29, 2010 7:29 PM
  • Lo que usted está observando es el comportamiento normal de SQL Server: Utiliza el máximo posible de memoria que tenga disponible. Revise este doc de la KB acerca de cómo limitar el consumo de memoria de SQL Server:

    Cómo ajustar el uso de memoria utilizando las opciones de configuración de SQL Server
    http://support.microsoft.com/default.aspx/kb/321363?p=1


    Gustavo Larriera Sosa, Microsoft MVP | ascii164.blogspot.com | /*Este mensaje se proporciona tal como es, sin garantías de ninguna clase.*/
    Monday, March 29, 2010 4:56 PM
  • Hola.

    Tienes DBCC FREEPROCCACHE (http://msdn.microsoft.com/es-es/library/ms174283.aspx) y DBCC DROPCLEANBUFFERS(http://msdn.microsoft.com/en-us/library/ms187762.aspx).

    Un interesante articulo de Eladio Rincón sobre ello: http://blogs.solidq.com/ES/erincon/Lists/Posts/Post.aspx?List=425f9eec-46f8-417c-a183-a735be5771cb&ID=14.

    Y otra forma de sacarle la memoria a SQL Server es, directamente, reducírsela drásticamente y luego dejarla como estaba, haciendo el cambio de la forma que ya conoces (cambiando max server memory, como te indicó Gustavo en este mismo hilo). Si tienes 4 Gb y le bajas a 400MB, para luego volver a ponerlo en 4Gb, el resultado es que, de momento, se liberarán 3,6Gb, que luego se irán recuperando de a poco.

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Friday, April 23, 2010 5:32 PM

All replies

  • Lo que usted está observando es el comportamiento normal de SQL Server: Utiliza el máximo posible de memoria que tenga disponible. Revise este doc de la KB acerca de cómo limitar el consumo de memoria de SQL Server:

    Cómo ajustar el uso de memoria utilizando las opciones de configuración de SQL Server
    http://support.microsoft.com/default.aspx/kb/321363?p=1


    Gustavo Larriera Sosa, Microsoft MVP | ascii164.blogspot.com | /*Este mensaje se proporciona tal como es, sin garantías de ninguna clase.*/
    Monday, March 29, 2010 4:56 PM
  • Estimado Gustavo.

    Mi servidor tiene 8 gb físicamente, y tiene 4 gb asignados al Sql Server distribuidos en dos instancias:

    La primera le asigne un maximo de 3 gb y a la segunda le asigne un máximo de 1 gb.

    Ahora bien, actualmente veo que tiene 0 en la memoria minima, lo que quiere decir que nunca liberaba la memoria?

    Voy hacer esa prueba y les comento los resultados.

    Gracias.

    Monday, March 29, 2010 6:50 PM
  • Hola.

    En general, SQL Server nunca liberará la memoria y en caso de necesidad competirá por ella. Si el servidor va a tener más roles además de los de SQL Server (lo cual parece claro, ya que hay otros 4Gb que no se le asignan y con 2 para el sistema operativo sería suficientes), sería aconsejable que le reservaras un mínimo a cada instancia, que incluso debería ser igual al de la memoria máxima.

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Monday, March 29, 2010 7:29 PM
  • Estimados qwalgrande y gustavo.

     

    Actualmente ya cambie la configuración del servidor y reinicie para poder ver el coportamiento,

    Muchas gracias por su apoyo y su valiosa experiencia. :)

     

    Monday, March 29, 2010 8:55 PM
  • Hola.

    Me alegro. De todos modos, los cambios en el máximo y el mínimo de memoria son operaciones que no requieren reiniciar el servicio (mucho menos el servidor) para que tomen efecto.

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Monday, March 29, 2010 9:06 PM
  • a mi me pasava lo mismo practicamente me dejaba el servidor sin memoria y tube que limitar la memoria a una memoria mas baja

    no hay otra manera???

    Wednesday, March 31, 2010 7:17 AM
  • Hola.

    Es la forma de impedir que SQL Server consuma toda la memoria de la máquina, limitársela para dejarle espacio al sistema operativo y resto de servicios que tengan que convivir con SQL Server. El motor es un devorador de recursos, si se le deja campo de acción, acaparará toda la memoria a su alcance y no la liberará. Ten en cuenta que es muchísimo más rápido tomar una página de datos alojada en memoria que subirla primero de disco a memoria. Mientras tenga memoria para tomar más, SQL Server no suelta la que tiene.

    Existen comando para liberar la memoria también, pero la administración de la memoria requiere que se le limite para un buen funcionamiento del servidor.

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Thursday, April 01, 2010 4:12 PM
  • Me podrias decir cual es el comando, para poder investigarlo y ver que implicaciones.
    Friday, April 23, 2010 5:16 PM
  • Hola.

    Tienes DBCC FREEPROCCACHE (http://msdn.microsoft.com/es-es/library/ms174283.aspx) y DBCC DROPCLEANBUFFERS(http://msdn.microsoft.com/en-us/library/ms187762.aspx).

    Un interesante articulo de Eladio Rincón sobre ello: http://blogs.solidq.com/ES/erincon/Lists/Posts/Post.aspx?List=425f9eec-46f8-417c-a183-a735be5771cb&ID=14.

    Y otra forma de sacarle la memoria a SQL Server es, directamente, reducírsela drásticamente y luego dejarla como estaba, haciendo el cambio de la forma que ya conoces (cambiando max server memory, como te indicó Gustavo en este mismo hilo). Si tienes 4 Gb y le bajas a 400MB, para luego volver a ponerlo en 4Gb, el resultado es que, de momento, se liberarán 3,6Gb, que luego se irán recuperando de a poco.

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    Friday, April 23, 2010 5:32 PM