¿Por qué SQL Server 2012 Express usa 9,5 GB de RAM en mi servidor?


22

Estoy creando una aplicación en la que planeo incrustar SQL Server 2012 Express como el almacén de datos principal. Al probar en mi máquina de desarrollo (Win7-32 ​​con 3 GB de RAM), nunca observé el sqlservr.exeproceso para usar más de 1 GB de RAM, como era de esperar de los límites de escala de hardware publicados para la edición Express de SQL Server.

Luego moví mi aplicación a una máquina de nivel de servidor (Win Server 2008R2 de 64 bits con 16 GB de RAM) para evaluar su rendimiento allí y me sorprendió descubrir que el sqlservr.exeproceso se expandió rápidamente a aproximadamente 9,5 GB de RAM y permaneció allí.

Lo reinicié un par de veces para ver si eso tendría algún efecto, pero cada vez, el proceso volvió rápidamente a ~ 9.5GB. Ahora me complace que SQL Server Express haga uso de mi RAM, pero me gustaría saber si este es un comportamiento esperado para no depender de los niveles de rendimiento que se basan en el uso de RAM que es incorrecto.

Para su información, la versión de SQL Server en mi máquina servidor, de acuerdo con SELECT @@VERSION, es:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Mi número de 9.5GB vino del número de "Conjunto de trabajo privado" en el Administrador de tareas. La primera tabla de salida de DBCC memorystatus(aunque en un servidor ahora inactivo) está a continuación:

PROCESS/SYSTEM COUNTS
Available Physical Memory   5543616512
Available Virtual Memory    8734902411264
Available Paging File       22471094272
Working Set                 9664200704
Percent of Committed Memory in WS   99
Page Faults                 2627510
System physical memory high 1
System physical memory low  0
Process physical memory low 0
Process virtual memory low  0

Salida de la consulta sugerida de spaghettidba sobre sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

más ~ 10 entradas más pequeñas que suman menos de 30 MB.

Respuestas:


12

SQL Express está limitado a 1 GB para el grupo de búferes, pero hay muchos otros grupos de memoria en SQL Server. Lo que me sorprende es el uso excesivo de agrupaciones de memoria sin búfer. Para averiguar el uso de memoria por empleado de memoria, ejecute esto:

SELECT type, SUM(pages_kb)/1024 AS MemoryMB
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY 2 DESC

Espero que esto ayude


El resultado de esa consulta es: MEMORYCLERK_SQLBUFFERPOOL 1410 OBJECTSTORE_LOCK_MANAGER 256 MEMORYCLERK_SQLCLR 38 MEMORYCLERK_SOSNODE 26 CACHESTORE_SQLCP 11 Y luego algunos más pequeños que suman <30 MB. Me parece extraño -arg- en el formato del comentario.
Dan

Hmmm MEMORYCLERK_SQLBUFFERPOOL solo va más allá del límite de 1 GB, por lo que podríamos enfrentar un error. Lo que me parece extraño es cómo está usando 9.5GB sin que se muestre en la consulta.
spaghettidba

Creo que hay algunas otras columnas interesantes en sys.dm_os_memory_clerks (además de single_pages_kb): virtual_memory_committed_kb parece más relevante en el caso de MEMORYCLERK_SQLBUFFERPOOL.
Razvan Socol
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.