none
Cómo libero memoria ram que no respeta el limite máximo establecido ?

    Pregunta

  • Hola Grupo,

       Tengo SQL Server 2008 R2 Enterprise 64 Bit, con 8 GB de memoria principal, resulta que tengo varios tareas programadas que se ejecutan por las noches, muchas de ellas son inserciones masivas a tablas, las cuales me disparán el uso de memoria y no las libera, le colocó uno limites por el administrador coorporativo de SQL de 5 GB, pero se los pasa por alto llegando a consumir hasta 7,8 GB.

      Que instrucción SQL se puede utilizar para liberar memoria, sin necesidad de reiniciar los servicios, que es lo que he estado haciendo hasta ahora para evitar la lentitud del motor, por otro lado estuve viendo las alertas pero falta determinar cual es la equivalencia de contadores con los GB de las ram ???, de tal forma que si los contadores pasan cierto umbral liberar dicha memoria, pero de nuevo con que instrucciones de SQL ??

      Desde ya se agradece vuestra ayuda

    Saludos

    JOGC

    lunes, 09 de julio de 2012 15:29

Respuestas

  • Hola.

    Como puedes ver, SQL Server consume 5Gb, con lo que, aunque existen otra serie de partes de SQL Server que no respetan el máximo establecido, en tu caso no se supera. El resto de aplicaciones que corren en el servidor están consumiendo también recursos, y es eso lo que reduce bastante la memoria disponible.

    Incidir en que, al contrario de lo que pueda parecer, no toda la memoria que consume SQL Server se ve restringida a lo fijado en "max server memory". Así, la memoria que se emplea para cada conexión, la necesaria para los linked server y algún otro caso más ("Non-buffer pool" que se le llama) no forman parte de ese "max server memory" y no pueden limitarse. Comentas que es un bug, en realidad es una cuestión de diseño que a mí me ha dado muchísimos quebraderos de cabeza (y me los sigue dando), con desviaciones del límite establecido vs memoria consumida de cerca de 20 Gb en sistemas grandes. Estoy seguro de que en futuras versiones de SQL Server será posible limitar de verdad el total de memoria que se le destina a SQL Server.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 27 de agosto de 2012 14:17
    Moderador

Todas las respuestas

  • Nos puedes decir como esque tienes configurada el uso de tu memoria con un pantallazo,

    echale un viztazo a este articulo

    http://technet.microsoft.com/es-es/library/ms178067(v=sql.105)

    http://technet.microsoft.com/es-es/library/ms178067(v=sql.90)

    http://dbasqlserver.wordpress.com/


    lunes, 09 de julio de 2012 16:08
  • De igual manera lo configure con las siguientes instrucciones

    sp_configure

    'show advanced options', 1;

    RECONFIGURE;

    sp_configure

    'max server memory', 5000;

    RECONFIGURE;

    lunes, 09 de julio de 2012 16:48
  • El umbral de memoria que se establece en esa pantalla es el del buffer de datos, pero existen otros componentes dentro del SQLOS que tienen su propio espacio de memoria, por lo que al final SQL Server puede llegar a consumir más.

    Sin embargo me choca que veas que consume casi 2Gb más. ¿Dónde estás viendo ese dato?

    lunes, 09 de julio de 2012 18:21
  • De esa captura, puedes subir otra de los valores actuales, en vez de los valores configurados..

    tambien puedes ejecutar esto para ver el estado de la memoria

    dbcc memorystatus

    lunes, 09 de julio de 2012 20:14
  • Tienes que tratar de disparar tus tareas en un orden propramado cada tarea para que no se cuelgue.

    Estas usando T-SQL para el cargado masivo o tal vez SSIS o SSAS ?

    También deberías revisar el administrador de cargas de trabajo:

    http://msdn.microsoft.com/es-ar/library/bb933866(v=sql.105).aspx


    MVP MCT MCTS Daniel Calbimonte

    http://elpaladintecnologico.blogspot.com

    • Marcado como respuesta Eder CostaOwner viernes, 13 de julio de 2012 11:47
    • Desmarcado como respuesta jogc viernes, 03 de agosto de 2012 14:03
    lunes, 09 de julio de 2012 22:10
  • Carlos,

         En el servidor donde tengo el motor de SQL sólo tiene eso y nada más, en la imagén de más abajo se ve el crecimiento, tomados del administrador de tareas de windows, ésto es de todos los día. Cúando reinicio todos los servicio de SQL baja a 2 GB su consumo.

      Existe alguna forma de saber que me puede estar consumiento memoria adicional y no la devuelva al sistema.

      De lo que dice dany más abajo, mis tareas están bien programdas y con un desface prudente de cada una de ellas.

      Desde ya agrezco me puedan ayudar.

      

    martes, 17 de julio de 2012 13:40
  • Ronald,

       Adjunto valores actuales de la memoria del server, esto porque mi problema persiste.

    Memory Manager                           KB
    ---------------------------------------- -----------
    VM Reserved                              8777848
    VM Committed                             5572496
    Locked Pages Allocated                   0
    Reserved Memory                          1024
    Reserved Memory In Use                   0

    (5 filas afectadas)

    Memory node Id = 0                       KB
    ---------------------------------------- -----------
    VM Reserved                              8774200
    VM Committed                             5568960
    Locked Pages Allocated                   0
    MultiPage Allocator                      320680
    SinglePage Allocator                     1580336

    (5 filas afectadas)

    Memory node Id = 64                      KB
    ---------------------------------------- -----------
    VM Reserved                              2560
    VM Committed                             2504
    Locked Pages Allocated                   0
    MultiPage Allocator                      2416
    SinglePage Allocator                     1580336

    MEMORYCLERK_SQLBUFFERPOOL (node 0)       KB
    ---------------------------------------- -----------
    VM Reserved                              8413184
    VM Committed                             5209600
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     0
    MultiPage Allocator                      400

    MEMORYCLERK_SQLUTILITIES (node 0)        KB
    ---------------------------------------- -----------
    VM Reserved                              120
    VM Committed                             120
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     240
    MultiPage Allocator                      0

    (7 filas afectadas)

    MEMORYCLERK_SQLSTORENG (node 0)          KB
    ---------------------------------------- -----------
    VM Reserved                              16064
    VM Committed                             16064
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     5160
    MultiPage Allocator                      5312

    (7 filas afectadas)

    MEMORYCLERK_SQLXP (node 0)               KB
    ---------------------------------------- -----------
    VM Reserved                              0
    VM Committed                             0
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     16
    MultiPage Allocator                      0

    (7 filas afectadas)

    MEMORYCLERK_XE_BUFFER (node 0)           KB
    ---------------------------------------- -----------
    VM Reserved                              4224
    VM Committed                             4224
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     0
    MultiPage Allocator                      0

    MEMORYCLERK_SOSNODE (node 0)             KB
    ---------------------------------------- -----------
    VM Reserved                              0
    VM Committed                             0
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     12128
    MultiPage Allocator                      14336

    MEMORYCLERK_SOSNODE (Total)              KB
    ---------------------------------------- -----------
    VM Reserved                              0
    VM Committed                             0
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     12136
    CACHESTORE_OBJCP (node 0)                KB
    ---------------------------------------- -----------
    VM Reserved                              0
    VM Committed                             0
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     64848
    MultiPage Allocator                      6568

    (7 filas afectadas)

    CACHESTORE_SQLCP (node 0)                KB
    ---------------------------------------- -----------
    VM Reserved                              0
    VM Committed                             0
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     1284456
    MultiPage Allocator                      287216

    (7 filas afectadas)

    CACHESTORE_PHDR (node 0)                 KB
    ---------------------------------------- -----------
    VM Reserved                              0
    VM Committed                             0
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     32976
    MultiPage Allocator                      16

    OBJECTSTORE_LOCK_MANAGER (node 0)        KB
    ---------------------------------------- -----------
    VM Reserved                              16384
    VM Committed                             16384
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     125880
    MultiPage Allocator                      0

    (7 filas afectadas)

    OBJECTSTORE_LOCK_MANAGER (Total)         KB
    ---------------------------------------- -----------
    VM Reserved                              16384
    VM Committed                             16384
    Locked Pages Allocated                   0
    SM Reserved                              0
    SM Committed                             0
    SinglePage Allocator                     125904
    MultiPage Allocator                      0

    Buffer Pool                              Value
    ---------------------------------------- -----------
    Committed                                640000
    Target                                   640000
    Database                                 412923
    Dirty                                    6477
    In IO                                    0
    Latched                                  1
    Free                                     29535
    Stolen                                   197542
    Reserved                                 0
    Visible                                  640000
    Stolen Potential                         410458
    Limiting Factor                          17
    Last OOM Factor                          0
    Last OS Error                            0
    Page Life Expectancy                     49098

    (15 filas afectadas)

    Process/System Counts                    Value
    ---------------------------------------- --------------------
    Available Physical Memory                824934400
    Available Virtual Memory                 8786762522624
    Available Paging File                    9260392448
    Working Set                              5670830080
    Percent of Committed Memory in WS        99
    Page Faults                              1965542
    System physical memory high              1
    System physical memory low               0
    Process physical memory low              0
    Process virtual memory low               0

    (10 filas afectadas)

    Procedure Cache                          Value
    ---------------------------------------- -----------
    TotalProcs                               24887
    TotalPages                               209522
    InUsePages                               586

    (3 filas afectadas)

    Global Memory Objects                    Pages
    ---------------------------------------- -----------
    Resource                                 462
    Locks                                    15738
    XDES                                     85
    SETLS                                    4
    SE Dataset Allocators                    8
    SubpDesc Allocators                      4
    SE SchemaManager                         1400
    SE Column Metadata Cache                 1195
    SQLCache                                 2530
    Replication                              2
    ServerGlobal                             52
    XP Global                                2
    SortTables                               35

    (13 filas afectadas)

    Query Memory Objects (internal)          Value
    ---------------------------------------- -----------
    Grants                                   0
    Waiting                                  0
    Available                                371995
    Current Max                              371995
    Future Max                               371995
    Physical Max                             468130
    Next Request                             0
    Waiting For                              0
    Cost                                     0
    Timeout                                  0
    Wait Time                                0

    Small Query Memory Objects (internal)    Value
    ---------------------------------------- -----------
    Grants                                   0
    Waiting                                  0
    Available                                12800
    Current Max                              12800
    Future Max                               12800

    (5 filas afectadas)

    Optimization Queue (internal)            Value
    ---------------------------------------- --------------------
    Overall Memory                           4202496000
    Target Memory                            2428076032
    Last Notification                        1
    Timeout                                  6
    Early Termination Factor                 5

    Memory Pool Manager                      Pages
    ---------------------------------------- -----------
    Reserved Current                         0
    Reserved Limit                           410458

    Memory Pool (internal)                   Pages
    ---------------------------------------- -----------
    Allocations                              197542
    Predicted                                314581
    Private Target                           0
    Private Limit                            0
    Total Target                             608000
    Total Limit                              608000
    OOM Count                                0

    MEMORYBROKER_FOR_CACHE (internal)        Pages
    ---------------------------------------- -----------
    Allocations                              194567
    Rate                                     5
    Target Allocations                       487991
    Future Allocations                       0
    Overall                                  513000
    Last Notification                        1

    MEMORYBROKER_FOR_STEAL (internal)        Pages
    ---------------------------------------- -----------
    Allocations                              2975
    Rate                                     2
    Target Allocations                       296396
    Future Allocations                       0
    Overall                                  513000
    Last Notification                        1

    MEMORYBROKER_FOR_RESERVE (internal)      Pages
    ---------------------------------------- -----------
    Allocations                              0
    Rate                                     -14
    Target Allocations                       410451
    Future Allocations                       117032
    Overall                                  513000
    Last Notification                        1

    viernes, 03 de agosto de 2012 13:57
  • Hola. Solo para validar: 1) Después de que configuraste tu memoria límite, reiniciaste el servidor? Es lo único que me puede indicar el porque no respeta el límite... 2) Cómo es el comportamiento normal del servidor cuando no ejecuta los procesos de cargue?

    Aunque entiendo el porque limitas la RAM de tu servidor, tal vez haya que revisar la manera en la cual se comportan los procedimientos de carga para ver si se pueden optimizar... Lo otro es leer bien este excelente post de Jonathan Kehayias sobre memoria en SQL Server y como configurarla: http://sqlskills.com/blogs/jonathan/post/Wow-An-online-calculator-to-misconfigure-your-SQL-Server-memory.aspx. Yo creo que puede arrojar mas y mejores datos para ver si ese límite es el adecuado o si, incluso, se requiere más memoria.

    Saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    viernes, 03 de agosto de 2012 14:23
  • Guilllermo,

       Si lo reinicie es más si reinicio los servicio, baja inmediatamente a menos de la mitad. A que te refieres cuándo indicas los procesos de carga ?. De igual forma leeré el link que me enviaste.

    Saludos

    JOGC

    viernes, 03 de agosto de 2012 15:10
  • Hola. Entiendo lo del reinicio del servidor; habrá que revisar con más calma el tema... Ya miramos a ver qué podemos hacer.

    Con respecto a los procesos de carga, me refería a lo que tu indicas como "tareas programadas que se ejecutan por las noches, muchas de ellas son inserciones masivas a tablas". Si, como te indico Daniel anteriormente, nos compartes que herramienta usas para éstos, mejor.

    Volviendo a lo de la memoria, sugiero activar por ahora el Monitor de Actividad a ver como es el comportamiento del servidor "en vivo", es decir, revisarlo en caliente a ver que puede pasar; más detalles en este post en mi blog. Tal vez para un mejor diagnóstico el Data Collector del mismo SQL Server nos puede ayudar. En este post en mi blog te indico como puedes hacerlo y te sugiero que lo hagas en otro servidor, siempre y cuando se pueda, para que recolectes en otro SQL Server. Habría que recopilar al menos durante unos cuatro días...

    Saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    viernes, 03 de agosto de 2012 15:28
  • Los de las tareas programadas no debiera ser el problema a lo más hace crecer los log que luego reduzco con un script. Para dichas tareas utilizo el plan de mantenimiento de SQL, personalmente creo que el tema va por el lado de la memoria que no es devuelta al sistema...echaré un vistazo por el monitos de actividad registraré lo que más pueda y poder enviarsélo. Pero una cosa es clara es que si yo fijo el límite de memoria por el administrador corporativo no debe pasar dichos límites, salvo que sea un bug.

      Bueno quedamos al habla y seguiré recopilando información.

    Saludos

    Jogc

    viernes, 03 de agosto de 2012 16:43
  • Hola.

    ¿Cómo se encuentra el problema? ¿Resolvimos tus dudas?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    jueves, 16 de agosto de 2012 11:58
    Moderador
  • Hola,

      El problema sigue persitiendo, sólo me queda hacer una colección de datos. Puede que esté herrado pero el Report Service lo tengo en la misma instancia, podrá estar consumiendo recursos y no los devuelva al sistema ?.

    Gracias

    JOCG

    jueves, 16 de agosto de 2012 17:49
  • Hola,

      El problema sigue persitiendo, sólo me queda hacer una colección de datos. Puede que esté herrado pero el Report Service lo tengo en la misma instancia, podrá estar consumiendo recursos y no los devuelva al sistema ?.

    Gracias

    JOCG

    Adjunto resultados de una colección de datos hechos en el seervidor de producción. La memoria de SQL sigue fijada a 5 GB, donde la grafica se ve cómo lo pasa por alto, por otro lado cómo interpreto el consumo de memoria del Report Service ?? son 5 GB cómo ocupa esos GB siendo que mi servidore tiene 8 GB ???

    jueves, 16 de agosto de 2012 20:26
  • Hola,

      El problema sigue persitiendo, sólo me queda hacer una colección de datos. Puede que esté herrado pero el Report Service lo tengo en la misma instancia, podrá estar consumiendo recursos y no los devuelva al sistema ?.

    Gracias

    JOCG

    Adjunto resultados de una colección de datos hechos en el seervidor de producción. La memoria de SQL sigue fijada a 5 GB, donde la grafica se ve cómo lo pasa por alto, por otro lado cómo interpreto el consumo de memoria del Report Service ?? son 5 GB cómo ocupa esos GB siendo que mi servidore tiene 8 GB ???

    En un  principio pense que podría ser el Report Service pero la verdad que el monitoreo en éstos días es bajo comparado con el motor...En la cita anterior vi mal el valor del consumo de memoria respecto a RS, por lo que mi problema sólo centra sólo en el Motor de SQL. Desde ya agradezco sugerencias que pueda realizar.

    viernes, 17 de agosto de 2012 15:00
  • Hola.

    Como puedes ver, SQL Server consume 5Gb, con lo que, aunque existen otra serie de partes de SQL Server que no respetan el máximo establecido, en tu caso no se supera. El resto de aplicaciones que corren en el servidor están consumiendo también recursos, y es eso lo que reduce bastante la memoria disponible.

    Incidir en que, al contrario de lo que pueda parecer, no toda la memoria que consume SQL Server se ve restringida a lo fijado en "max server memory". Así, la memoria que se emplea para cada conexión, la necesaria para los linked server y algún otro caso más ("Non-buffer pool" que se le llama) no forman parte de ese "max server memory" y no pueden limitarse. Comentas que es un bug, en realidad es una cuestión de diseño que a mí me ha dado muchísimos quebraderos de cabeza (y me los sigue dando), con desviaciones del límite establecido vs memoria consumida de cerca de 20 Gb en sistemas grandes. Estoy seguro de que en futuras versiones de SQL Server será posible limitar de verdad el total de memoria que se le destina a SQL Server.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 27 de agosto de 2012 14:17
    Moderador
  • Hola.

    Sólo para confirmar que en SQL Server 2012, el parámetro "max server memory" ya incluye la mayoría de la memoria que SQL Server puede tomar (Non-buffer pool, Multi-pages y CLR). Más detalles aquí:

    http://support.microsoft.com/kb/2663912/en-us


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 31 de agosto de 2012 7:53
    Moderador
  • Hola Carlos

    He revisado tu problema y veo  que es muy parecido al que yo tengo, tengo un Servidor en el cual la memoria siempre esta al tope, y es curioso porque acabo de matar todos los procesos del SQL SERVER R2 para ver si la memoria baja pero sigue igual, tu llegaste a solucinar este problema, si lo llegaste a solucionar ayudame por favor.  

    

    sábado, 11 de enero de 2014 6:04