Ist der SQL Server Express-Speicher und die CPU pro Instanz begrenzt?


32

Wenn ein Server über 8 GB RAM verfügt und ich 4 Instanzen von SQL Server Express ausführe, beträgt das von SQL Server verwendete Gesamtspeicherlimit 1 GB oder 4 GB?

Wäre es ratsam, mehrere Instanzen wie diese auszuführen, damit jede Datenbank Ressourcen besser nutzen kann (vorausgesetzt, der Server verfügt über viele Ressourcen)?

Antworten:


27

Wenn ein Server über 8 GB RAM verfügt und ich 4 Instanzen von SQL Express ausführe, beträgt das von SQL Server verwendete Gesamtspeicherlimit 1 GB oder 4 GB?

Jede Instanz kann bis zu 1 GB Speicher für den Pufferpool verwenden . Jede Instanz kann insgesamt etwas mehr als 1 GB verwenden, da nicht alle Speicherzuordnungen über den Pufferpool erfolgen. In Ihrem Fall beträgt der maximale Arbeitsspeicher, der von den vier Instanzen für den Pufferpool verwendet wird, 4 GB.

BOL-Extrakt

Zur Bestätigung habe ich zwei Instanzen des SQL Server 2008 Express-Datenbankmoduls gestartet , einige Aktivitäten zum Laden der (separaten) Pufferpools ausgeführt und dann die Speicherauslastung pro Instanz auf verschiedene Arten untersucht, z. B. mit DBCC MEMORYSTATUS oder durch Zählen der Anzahl der Puffer unter Verwendung der DMV sys.dm_os_buffer_descriptors .

Die folgenden physischen Speicherbelegungsnummern wurden mit gleichzeitigen Abfragen des System-DMV sys.dm_os_process_memory für jede Instanz des Datenbankmoduls ermittelt:

SELECT 
    dopm.physical_memory_in_use_kb 
FROM sys.dm_os_process_memory AS dopm;

Ausgabe:

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

Jede davon übersteigt etwas 1 GB, da die gesamte physische Speichernutzung, wie bereits erwähnt, mehr als nur die Pufferpoolnutzung umfasst.

Wäre es ratsam, mehrere Instanzen wie diese auszuführen, damit jede Datenbank Ressourcen besser nutzen kann (vorausgesetzt, der Server verfügt über viele Ressourcen)?

Wenn die Datenbanken für jede Instanz funktionsunabhängig sind, können mindestens mehrere Express-Instanzen auf diese Weise ausgeführt werden. Sie müssen jedoch sorgfältig auf die Konfiguration achten, und die Wartung kann komplexer werden.

Wenn Sie eine andere Edition verwenden, z. B. die voll funktionsfähige (und sehr kostengünstige) Developer Edition, sind Sie möglicherweise besser bedient, wenn die beabsichtigte Verwendung mit der Lizenz übereinstimmt. Sie müssten viel mehr über die Umstände sagen, um eine klare Antwort auf diesen Punkt zu erhalten.


3
Bemerkenswert für den klugen Leser: SQL Server Database EngineMittel A Single Instance. Jedes Mal, wenn Sie den Verbindungsdialogserver ändern müssen, zu dem Sie eine Verbindung herstellen (z. B. localhost\devvs localhost\test), handelt es sich um eine neue "Instanz" oder eine neue "Engine". Ich dachte nur, ich würde das klären.
jcolebrand

7

Jede Instanz zählt separat, da sie einen separaten Prozess hat.


1
Ich gehe davon aus, dass Sie sicher sind, dass der Limiter dann nicht auf alle Prozesse angewendet wird?

-8

In SQL Express kann das Datenbankmodul nur 1 GB RAM belegen , und jede Datenbank kann nicht größer als 10 GB sein.

4 Instanzen müssten sich also immer noch diese 1 GB RAM teilen.

Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx .

Eine ähnliche Diskussion hier über Stack Overflow besagt, dass dies übrigens die richtige Antwort ist, sodass Sie nicht abstimmen müssen: https://stackoverflow.com/questions/1169634/limitations-of-sql-server-express

Diese Seite sagt dasselbe, obwohl es sich um SQL Server Express 2005 handelt: http://www.edugeek.net/forums/windows-server-2000-2003/55183-sql-server-express-2005-memory-limit- per-instance.html


3
Folgt nicht unbedingt - ist es 1 Engine pro Server oder pro Instanz?

1
OK, das impliziert es, aber es ist auch möglich, dass sie es auf der Speichergrenze verpasst haben.

1
Nur weil es im Internet ist, muss es wahr sein. Sie würden niemals zulassen, dass etwas im Internet nicht stimmt. ~ Das heißt, das Problem hier ist, dass es einen Verwaltungsprozess oder etwas geben muss, das in das Betriebssystem eingebrannt ist, um SQL Express für immer einzuschränken. Ich glaube wirklich nicht, dass das passiert ist (AKA, es ist absolut nicht passiert, basierend auf der Tatsache, dass ich Sauerstoff einatme und der Logik wirklich gut folgen kann) gebraucht.
jcolebrand

2
Es ist unwahrscheinlich, dass Sie von Leuten dazu aufgefordert werden, Abstimmungen zu entfernen, was natürlich eine schlechte Antwort ist, unabhängig davon, aus welcher Quelle Sie zitieren. Wenn Sie den Quellcode wirklich zitieren möchten, laden Sie mehrere Instanzen und zeigen Sie deren tatsächliche Belastung im Speicher an. Das ist der einzige Weg, um sicher zu wissen. Entweder das, oder Sie zeigen uns den Microsoft-Code, der das Verhalten von SQL Express steuert. Es handelt sich immer um eine Instanzverwaltung, da jeder Dienst von oben nach unten in sich geschlossen ist. Alle Verwaltungsdienste arbeiten über Ports.
jcolebrand

2
Maximum memory utilized (SQL Server Database Engine)Beachten Sie, wie sie dort dieselbe Terminologie verwenden wie auf der Leitung: Maximum Compute Capacity Used by a Single Instance (SQL Server Database Engine)1(Für diejenigen, die zu Hause spielen, bedeutet dies, dass es sich um dasselbe Maß handelt.) Msdn.microsoft.com/en-us/library/… und ich auch Ich liebe es, wie die Antwort auf SO, die verlinkt wurde, FALSCH FALSCH FALSCH ist. Beginnen Sie mit "1 Core oder 4 Sockets", die Editoren können nicht einmal richtig kopieren und einfügen.
Jcolebrand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.