La limite de mémoire et d'UC de SQL Server Express est-elle par instance?

32

Si je dispose de 8 Go de RAM sur un serveur et que je lance 4 instances de SQL Server Express, la limite de mémoire totale utilisée par SQL Server est-elle de 1 Go ou 4 Go?

Serait-il conseillé d'exécuter plusieurs instances de ce type pour permettre à chaque base de données de mieux utiliser les ressources (en supposant que le serveur dispose de beaucoup de ressources)?

wizzardmr42
la source

Réponses:

27

Si je dispose de 8 Go de RAM sur un serveur et que je lance 4 instances de SQL Express, la limite de mémoire totale utilisée par SQL Server sera-t-elle de 1 Go ou 4 Go?

Chaque instance peut utiliser jusqu'à 1 Go de mémoire pour le pool de mémoire tampon . Chaque instance peut utiliser un peu plus de 1 Go au total, car toutes les allocations de mémoire ne passent pas par le pool de mémoire tampon. Dans votre cas, la mémoire maximale utilisée par les quatre instances pour le pool de mémoire tampon serait de 4 Go.

Extrait de BOL

Pour confirmer, j’ai démarré deux instances du moteur de base de données SQL Server 2008 Express, effectué quelques tâches pour charger les pools de mémoire tampon (séparés), puis examiné la mémoire utilisée par instance de différentes manières, par exemple à l’aide de DBCC MEMORYSTATUS ou en comptant le nombre de mémoires tampons à l’aide du fichier DMV sys.dm_os_buffer_descriptors .

Les numéros d' utilisation de la mémoire physique ci-dessous ont été obtenus à l'aide de requêtes simultanées sur le système DMV sys.dm_os_process_memory du système sur chaque instance du moteur de base de données:

SELECT 
    dopm.physical_memory_in_use_kb 
FROM sys.dm_os_process_memory AS dopm;

Sortie:

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

Chacune d'entre elles dépasse légèrement 1 Go, car l'utilisation totale de la mémoire physique ne comprend pas uniquement l'utilisation du pool de mémoire tampon, comme indiqué précédemment.

Serait-il conseillé d'exécuter plusieurs instances de ce type pour permettre à chaque base de données de mieux utiliser les ressources (en supposant que le serveur dispose de beaucoup de ressources)?

Si les bases de données sur chaque instance sont fonctionnellement indépendantes, il est au moins réalisable d'exécuter plusieurs instances d'Express de cette manière, bien que vous deviez faire très attention à la configuration et la maintenance peut être rendue plus complexe.

Vous pourriez être mieux servi en utilisant une autre édition, telle que la Developer Edition (très peu coûteuse), si l'utilisation prévue correspond à la licence. Il vous faudrait en dire beaucoup plus sur les circonstances pour avoir une réponse claire sur ce point.

Paul White dit GoFundMonica
la source
3
À noter également pour le lecteur astucieux: SQL Server Database Enginemoyens A Single Instance. Chaque fois que vous devez changer le serveur de dialogue de connexion auquel vous vous connectez (par exemple, localhost\devvs localhost\test), il s'agit d'une nouvelle "instance" ou d'un nouveau "moteur". Je pensais juste que je clarifierais ça.
jcolebrand
7

Chaque instance compte séparément car elle a un processus séparé.

TomTom
la source
1
Je suppose que vous êtes certain que le limiteur n'est pas appliqué à tous les processus?
-8

Dans SQL Express, le moteur de base de données ne peut utiliser que 1 Go de RAM , et aucune base de données ne peut dépasser 10 Go.

Donc, 4 instances devraient toujours partager ce 1 Go de RAM.

Vous pouvez en savoir plus sur http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx .

Une discussion similaire ici sur Stack Overflow indique que c’est la bonne réponse BTW, il n’est donc pas nécessaire de passer au vote suivant: https://stackoverflow.com/questions/1169634/limitations-of-sql-server-express

Cette page dit la même chose, même s’il s’agit de SQL Server Express 2005: http://www.edugeek.net/forums/windows-server-2000-2003/55183-sql-server-express-2005-memory-limit- par instance.html

Communauté
la source
3
Ne suit pas nécessairement - est-ce 1 moteur par serveur ou par instance?
1
OK, cela sous-entend, mais il est également possible qu'ils l'aient manqué sur la limite de mémoire.
1
Juste parce que c'est sur Internet, ça doit être vrai. Ils ne laisseraient jamais quelque chose de mal sur Internet. ~ Dire cela pour dire que le problème ici est qu'il doit y avoir un processus de gestion ou quelque chose d'intégré dans le système d'exploitation dans le seul but de restreindre à jamais SQL Express. Je ne pense vraiment pas que cela se soit produit (AKA, cela ne s'est absolument pas produit, étant donné que je respire de l'oxygène et que je peux très bien suivre la logique), le fait est que le processus lui-même gère la quantité de RAM utilisé.
jcolebrand
2
Il est peu probable que demander aux gens de supprimer les votes défavorables sur ce qui est naturellement une mauvaise réponse vous obtienne des votes positifs, quelle que soit la source que vous citez. Si vous voulez vraiment citer la source, chargez plusieurs instances et affichez leur charge réelle en mémoire. C'est le seul moyen de savoir avec certitude. Soit cela, soit montrez-nous le code Microsoft qui régit le comportement de SQL Express. C'est toujours gestion par instance, car chaque service est autonome du haut vers le bas. Tous les services de gestion fonctionnent sur les ports.
jcolebrand
2
Maximum memory utilized (SQL Server Database Engine)Remarquez comment ils utilisent la même terminologie que sur la ligne: Maximum Compute Capacity Used by a Single Instance (SQL Server Database Engine)1(pour ceux qui jouent à la maison, le fait est qu’ils ont la même mesure) msdn.microsoft.com/en-us/library/… et moi aussi J'adore le fait que la réponse à SO qui était liée est FAUX FAUX. Commencez par "1 cœur ou 4 sockets", les éditeurs ne peuvent même pas copier-coller correctement.
jcolebrand