¿Por qué SQL Server consume más memoria del servidor?

36

SQL Server consume el 87.5% de la RAM de mi servidor. Esto recientemente causó muchos cuellos de botella en el rendimiento, como la lentitud. Investigué este problema. Una solución común que podría encontrar en Internet es establecer el límite máximo para SQL Server. Esto se hizo y se obtiene mucha mejora. Quiero saber por qué si no se establece el valor máximo de memoria, por qué SQL Server sigue consumiendo los recursos

kombo
fuente
3
¿Cómo ha determinado que el uso de RAM de SQL Server es la fuente de cualquier cuello de botella? ¿Lentitud en qué? En todo caso, SQL Server debería ser más eficiente si usa tanta RAM como sea posible (o incluso más de lo que espera o quiere). Y si tiene otras aplicaciones en el servidor que están sufriendo porque SQL Server está usando memoria (como está diseñado), muévalas a otro servidor .
Aaron Bertrand
He utilizado el método aquí lucidica.com/help/got-sql-eating-up-ram Avísame si eso ayudó :) Saludos cordiales, Nikita.
Nikita Kosousov

Respuestas:

48

SQL Server consumirá tanta memoria como lo permita . Por defecto, ese número abarcaría el 100% de su memoria numérica en su máquina. Es por eso que estás viendo lo que estás viendo. Si le da a SQL Server 24 GB de memoria, SQL Server hará todo lo posible para usar 24 GB de memoria. Luego tienes SQL Server y el SO luchando por los recursos, y siempre resultará en un bajo rendimiento.

Cuando establece el max server memorylímite de configuración, está limitando cuánto SQL Server puede asignar para el grupo de búferes (prácticamente donde almacena las páginas de datos y el caché de procedimientos). Hay otros empleados de memoria dentro de SQL Server, por lo que para su versión particular (2008 R2 y posteriores), max server memorysolo controla el grupo de búferes. Pero este siempre será el mayor consumidor de memoria.

Referencia de TechNet sobre los efectos de la memoria mínima y máxima del servidor

Las opciones de configuración de memoria mínima del servidor y memoria máxima del servidor establecen límites superior e inferior para la cantidad de memoria utilizada por el grupo de búferes del Motor de base de datos de Microsoft SQL Server.

En cuanto a la cuestión de cuánta memoria debo dejar para el sistema operativo , esa es una métrica comúnmente debatida. Realmente todo depende, principalmente de qué otros procesos se ejecutan en el servidor . Siempre que sea un servidor verdaderamente dedicado (y ese casi nunca es el caso). Me gusta ver al menos 4 GB de memoria para el sistema operativo (y aún más en cajas de hardware grande). Pero lo más importante, controle cuánta memoria no utilizada hay. Sea liberal y brinde más memoria a SQL Server si nota que hay mucha memoria disponible (puede ser monitoreada a través de perfmon) y memoria no utilizada (por supuesto, siempre dejando un pequeño búfer para esas situaciones de esquina).

Thomas Stringer
fuente
11

SQL Server está diseñado para usar toda la memoria en el servidor de forma predeterminada. La razón de esto es que SQL Server almacena en caché los datos en la base de datos en la RAM para que pueda acceder a los datos más rápido de lo que podría si necesitara leer los datos del disco cada vez que un usuario los necesitara. Si necesitáramos ir a los discos cada vez que SQL Server necesitara los mismos datos una y otra vez, los requisitos de E / S del disco serían increíblemente altos.

Normalmente, recomiendo que la gente deje alrededor de 4 Gigas de RAM para Windows, pero eso realmente depende de la cantidad de software que se ejecuta en el servidor, qué componentes de SQL Server está utilizando (no todos los componentes siguen esa configuración), etc.

mrdenny
fuente
6

Esto funciona instantáneamente sin la necesidad de reiniciar SQL:

Opciones de configuración del servidor de memoria del servidor

Use las dos opciones de memoria del servidor, memoria mínima del servidor y memoria máxima del servidor , para reconfigurar la cantidad de memoria (en megabytes) administrada por el Administrador de memoria de SQL Server para una instancia de SQL Server. De manera predeterminada, SQL Server puede cambiar sus requisitos de memoria dinámicamente en función de los recursos del sistema disponibles.

Procedimiento para configurar una cantidad fija de memoria Para configurar una cantidad fija de memoria:

  1. En el Explorador de objetos, haga clic con el botón derecho en un servidor y seleccione Propiedades.
  2. Haz clic en el nodo Memoria.
  3. En Opciones de memoria del servidor, ingrese la cantidad que desea para Memoria mínima del servidor y Memoria máxima del servidor.

Use la configuración predeterminada para permitir que SQL Server cambie sus requisitos de memoria dinámicamente en función de los recursos del sistema disponibles. La configuración predeterminada para la memoria mínima del servidor es 0, y la configuración predeterminada para la memoria máxima del servidor es 2147483647 megabytes (MB).

¡Espero que esto ayude!

Nikita Kosousov
fuente