¿La memoria de SQL Server Express y el límite de CPU por instancia?


32

Si tengo 8 GB de RAM en un servidor y ejecuto 4 instancias de SQL Server Express, ¿el límite de memoria total utilizado por SQL Server será de 1 GB o 4 GB?

¿Sería aconsejable ejecutar varias instancias como esta para permitir que cada base de datos haga un mejor uso de los recursos (suponiendo que el servidor tenga muchos recursos)?

Respuestas:


27

Si tengo 8 GB de RAM en un servidor y ejecuto 4 instancias de SQL Express, ¿el límite de memoria total utilizado por SQL Server será de 1 GB o 4 GB?

Cada instancia puede usar hasta 1 GB de memoria para el grupo de búferes . Cada instancia puede usar un poco más de 1 GB en total porque no todas las asignaciones de memoria pasan por el grupo de búferes. En su caso, la memoria máxima utilizada por las cuatro instancias para el grupo de búferes sería de 4 GB.

Extracto de BOL

Para confirmar, inicié dos instancias del Motor de base de datos Express de SQL Server 2008 , realicé alguna actividad para cargar los grupos de búferes (separados) y luego miré la utilización de la memoria por instancia de varias maneras, por ejemplo, utilizando DBCC MEMORYSTATUS o contando el número de buffers utilizando el DMV sys.dm_os_buffer_descriptors .

Los números de uso de memoria física a continuación se obtuvieron mediante consultas simultáneas contra el sistema DMV sys.dm_os_process_memory en cada instancia del motor de base de datos:

SELECT 
    dopm.physical_memory_in_use_kb 
FROM sys.dm_os_process_memory AS dopm;

Salida:

╔═══════════╦═══════════╗
 Instance1  Instance2 
╠═══════════╬═══════════╣
   1102872    1059812 
╚═══════════╩═══════════╝

Cada uno de estos tiene un poco más de 1 GB, ya que el uso total de la memoria física incluye más que solo el uso de la agrupación de almacenamiento intermedio, como se mencionó anteriormente.

¿Sería aconsejable ejecutar múltiples instancias como esta para permitir que cada base de datos haga un mejor uso de los recursos (suponiendo que el servidor tenga muchos recursos)?

Si las bases de datos en cada instancia son funcionalmente independientes, entonces es al menos viable ejecutar múltiples instancias de Express de esta manera, aunque deberá prestar especial atención a que la configuración y el mantenimiento pueden ser más complejos.

Puede que le sirva mejor usar otra edición, como la Edición para desarrolladores con todas las funciones (y muy económica), si el uso previsto coincide con la licencia). Tendría que decir mucho más sobre las circunstancias para obtener una respuesta clara sobre este punto.


3
También de nota, para el lector astuto: SQL Server Database Enginemedios A Single Instance. Cada vez que tiene que cambiar el servidor de diálogo de conexión al que se está conectando (p. Ej., localhost\devVs localhost\test) que es una nueva "Instancia" o un nuevo "Motor". Solo pensé que aclararía eso.
jcolebrand

7

Cada instancia cuenta por separado ya que tiene un proceso separado.


1
¿Asumo que está seguro de que el limitador no se aplica en todos los procesos entonces?

-8

En SQL Express, el motor de la base de datos solo puede consumir 1 GB de RAM , y cualquier base de datos no puede ser mayor de 10 GB.

Entonces, 4 instancias aún tendrían que compartir esa RAM de 1 GB.

Puede encontrar mucho más en http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx .

Una discusión similar aquí sobre Stack Overflow dice que esta es la respuesta correcta, por cierto, por lo que no es necesario votar a favor: https://stackoverflow.com/questions/1169634/limitations-of-sql-server-express

Esta página dice lo mismo, aunque se trata de SQL Server Express 2005: http://www.edugeek.net/forums/windows-server-2000-2003/55183-sql-server-express-2005-memory-limit- por instancia.html


3
No necesariamente sigue: ¿es 1 motor por servidor o por instancia?

1
OK, eso lo implica, pero también es posible que se lo hayan perdido en la línea de límite de memoria.

1
Solo porque está en Internet, tiene que ser cierto. Nunca dejarían que algo malo estuviera en internet. ~ Decir eso para decir que el problema aquí es que tiene que haber un proceso de administración o algo integrado en el sistema operativo con el único propósito de restringir todo SQL Express para siempre. Realmente no creo que eso haya sucedido (también conocido como absolutamente no sucedió, debido al hecho de que respiro oxígeno y puedo seguir la lógica realmente bien), por lo que el hecho es que el proceso en sí mismo maneja la cantidad de RAM usado.
jcolebrand

2
Es poco probable que rogar a las personas que eliminen los votos negativos sobre lo que naturalmente es una mala respuesta te dará votos positivos, independientemente de la fuente que cites. Si realmente desea citar la fuente, cargue varias instancias y muestre su carga real en la memoria. Esa es la única forma de saberlo con certeza. O eso, o muéstrenos el código de Microsoft que rige el comportamiento de SQL Express. Siempre es gestión por instancia, porque cada servicio es autónomo de arriba a abajo. Todos los servicios de gestión funcionan a través de puertos.
jcolebrand

2
Maximum memory utilized (SQL Server Database Engine)Observe cómo usan la misma terminología allí que en la línea: Maximum Compute Capacity Used by a Single Instance (SQL Server Database Engine)1(para aquellos que juegan en casa, el punto es que son la misma medida) msdn.microsoft.com/en-us/library/… y yo también me encanta cómo la respuesta en SO que estaba vinculada es MAL MAL MAL MAL. Comience con "1 núcleo o 4 sockets", los editores ni siquiera pueden copiar y pegar correctamente.
jcolebrand
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.