2009-05-13 8 views
11

Estoy llevando a cabo pruebas de resistencia en mi base de datos, que se aloja en SQL Server 2008 de 64 bits que se ejecuta en una máquina de 64 bits con 10 GB de RAM.SQL Server 2008 ocupa mucha memoria?

Tengo 400 hilos. Cada subproceso consulta la base de datos cada segundo, pero el tiempo de consulta no lleva tiempo, como dice el generador de perfiles SQL, pero después de 18 horas SQL Server usa hasta 7.2 GB de RAM y 7.2 GB de memoria virtual.

¿Es este comportamiento normal? ¿Cómo puedo ajustar SQL Server para limpiar la memoria no utilizada?

+0

¿Cómo mide estas cifras? Tenga en cuenta que el administrador de tareas puede dar cifras que son engañosas (siempre optaría por perfmon, y miro los bytes privados/virtuales) –

+0

Estoy monitoreando el servidor sql usando el administrador de tareas y la aplicación de red de puntos separada que usa la clase PerformanceCounter –

Respuesta

27

SQL Server está diseñado para usar tanta memoria como pueda tener en sus manos, para mejorar el rendimiento almacenando en la memoria caché montones de cosas. La recomendación es usar máquinas dedicadas para SQL Server, lo que hace que este sea un enfoque perfectamente válido, ya que no espera que nadie más necesite la memoria. Entonces no deberías preocuparte por esto; es perfectamente normal.

Dicho esto, si está en una máquina de desarrollo en lugar de en un entorno en vivo, quizás desee limitar la cantidad de memoria para evitar que su caja sea tomada. En este caso, la manera más fácil es abrir SQL Server Management Studio, hacer clic derecho en el servidor y seleccionar "Propiedades", luego en la pestaña "Memoria" puede establecer la memoria máxima del servidor.

1

Desactivando la respuesta de Greg, cuando configure la memoria intente dejar al menos 10% de la memoria total libre para el sistema operativo. Si SQL se sale de control en una consulta larga, quiere que ese amortiguador pueda acceder de forma remota y administrar la caja.

4

En realidad, hay un pequeño truco para conseguir lo que estás buscando. El problema/pregunta es cómo hacer que SQL Server "temporalmente" renuncie a la memoria que puede no necesitar de manera agresiva, luego déjelo que lo vuelva a plantear según sea necesario.

Para ello, ejecute el siguiente script:

EXEC sys.sp_configure N'show advanced options', N'1' 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'show advanced options', N'0' 

RECONFIGURE WITH OVERRIDE 

GO 

poner en sus propios valores para {marca de agua de baja} y {} la cuota máxima (en MB).

Esto forzará la memoria a una cantidad mínima, luego la abrirá de nuevo de inmediato si SQL Server lo necesita/lo quiere.

Lo único que queda por hacer es programar el script para que se ejecute periódicamente.

Recomendación:

Cuando SQL Server no se utiliza mucho, intente ejecutar esta cada 6 horas de forma automática. Si se usa mucho, corra una vez cada 24 horas (por ejemplo, en el medio de la noche o justo antes de que comience el día). Tu uso variará

Cuestiones relacionadas