Welche Auswirkungen hat die Ausführung mehrerer kleinerer DBs anstelle einer einzelnen größeren DB auf einem Server auf die Leistung?

7

Unsere Datenbankarchitektur ermöglicht es, dass mehrere "Kunden" in derselben Datenbank vorhanden sind. Wir haben sie jedoch aus administrativen Gründen (Patching, Backup usw.) in mehrere Datenbanken aufgeteilt.

Frage 1

Was wären die Auswirkungen auf die Leistung, wenn wir die Kunden in einer einzigen Datenbank zusammenfassen würden?

Frage 2

Wir haben derzeit mehrere Kunden in jeder Datenbank, aber wir haben möglicherweise 10 in jeder und sagen wir 5 Datenbank; Wenn wir also die DBs konsolidieren würden, hätten wir nur eine DB mit 50 Kunden. Würde das einen großen Unterschied für die Leistung bedeuten?

Hundeohren
quelle
Wo haben Sie derzeit 10 Kunden in jeder von 5 Datenbanken, wie viele physische Server und SQL-Instanzen gibt es?
Mark Storey-Smith
Dies sind fiktive Zahlen, bei denen wir eigentlich keine Kunden haben. Nun, wir haben einen Kunden, der in verschiedene Regionen und Unterregionen unterteilt ist, aber die Software kann mit ihnen arbeiten, aufgeteilt auf DBs, oder in einer einzelnen DB haben wir viele physische Boxen, in denen mehrere DBs ausgeführt werden .
Hundeohren
1
Dies ist eine dieser großen "es kommt darauf an" Situationen. Machen Sie sich ein Bild davon, wie stark die Ressourcen durch die Verwendung von Perfmon belastet werden. Durch einige Berechnungen und Tests können Sie sich eine ziemlich gute Vorstellung machen, bevor Sie diese in die Produktion bringen.
Thomas Stringer
@ Surfer513 - welche Berechnungen und Tests? Könnten Sie eine tatsächliche Antwort erweitern? Dies ist eine ziemlich grundlegende Frage "Big v Multiple Small" - aber ich kann anscheinend nichts Spezielles im Internet finden.
Hundeohren
Wie groß sind die Datenbanken? Wie viele gleichzeitige Benutzer des Systems gibt es?
Stuart Blackler

Antworten:

7

Wie andere in den Kommentaren angegeben haben, ist es schwierig, eine Antwort auf diese Frage zu finden, ohne die Anwendung zu verstehen. Es kommt darauf an, es tut es wirklich wirklich .

Die Art der Frage (und Antwort) ändert sich auch auf der Grundlage der physischen Umgebung, dh mehrerer Datenbanken auf einem einzelnen Server oder verteilt auf mehrere? Ist ein Kunde „typisch“ oder verbrauchen einige einen überproportionalen Prozentsatz der Serverressourcen? Wird es in 3 Jahren 50 Kunden oder 50000 geben?

Das heißt, lassen Sie uns einen Sprung drauf machen.

Was wären die Auswirkungen auf die Leistung, wenn wir die Kunden in einer einzigen Datenbank zusammenfassen würden?

Mögliche Gewinne

  • Reduzierung des Plan-Cache-Speichers. Wenn Sie 5 derselben Datenbank haben, haben Sie 5 Kopien jedes Ausführungsplans.
  • Verbesserte Pufferpoolauslastung. Ähnlich wie oben sind alle gemeinsamen Daten, die Sie in jeder Datenbank haben, im Pufferpool für jede Datenbank vorhanden.
  • Verbesserte CPU- / Speicherauslastung. Durch die Konsolidierung mehrerer Server auf einem einzigen Server wird der Overhead des Betriebssystems auf jedem Host verringert.
  • Möglicherweise verbesserte E / A-Auslastung. Das Kombinieren der kleineren Arrays, die jedem Server zugewiesen sind, kann zu einem verbesserten Gesamtdurchsatz führen, da die Kapazität zur Bewältigung von Spitzen höher ist.

Mögliche Risiken

  • $$$. Mehrere Server mit niedrigen Spezifikationen sind in der Regel billiger als ein mächtiges Kraftpaket. Die Verteilung der Last auf Dienstprogrammserver kann billiger sein.
  • Erweiterungsflexibilität. Wenn Sie alle Kunden auf diesem mächtigen Powerhouse-Server haben und der Dampf ausgeht, ist ein Upgrade schwierig und komplex.
  • Sperren / Blockieren / Deadlocks. Mängel in der Datenbank und im Anwendungsdesign werden wahrscheinlich in einer einzelnen Hostumgebung verstärkt.

Aus Ihren Kommentaren geht hervor, dass dies für Ihre Software und Ihr Unternehmen noch sehr früh ist. Ich würde also nach Wegen suchen, um die Flexibilität zu maximieren und die Investitionsausgaben zu minimieren.

  • Installieren Sie ein erweiterbares iSCSI-Array. Mit separatem Speicher können Sie sowohl die unformatierte GB-Kapazität als auch IOPS isoliert von den Servern erweitern.
  • Machen Sie die Daten Ihrer Kunden portabel. Die Nachrüstung ist möglicherweise schwierig. Wenn Sie jedoch die Daten eines Kunden von einem System auf ein anderes migrieren können, können Sie sie zwischen den Systemen verschieben, um die Arbeitslast besser auszugleichen.
  • Stellen Sie Ihre Kunden ein. Ordnen Sie jeden Kunden abhängig von seiner Nutzung einer Ebene zu, möglicherweise zunächst 3 Ebenen. Analysieren Sie typische Nutzungsmuster für diese Kundenebenen und ordnen Sie sie den Serverressourcen entsprechend zu. Es kann sein, dass Sie 200 Tier 3-Kunden in einer einzigen Box oder 50 Tier 2- oder 10 Tier 1-Kunden unterbringen können.

Vielleicht passt die Virtualisierung besser. Vielleicht würde die Cloud funktionieren. Vielleicht Hybrid Cloud. Ehrlich gesagt, es kommt wirklich darauf an . Rufen Sie einen Experten um Hilfe, er könnte Ihnen ein Vermögen sparen.

Mark Storey-Smith
quelle
Je mehr Datenbanken sich auf einem bestimmten Server befinden, desto länger dauert es, bis dieser Server nach einem Neustart, einem Fehler usw. online ist, da SQL Server ausstehende Rollbacks / Redos und andere Überprüfungen durchführen muss, bevor jede Datenbank online geschaltet wird.
Eric Humphrey - Lotsahelp
4

Einer der größten Nachteile bei vielen kleineren (und kleineren, offensichtlich relativ großen) Datenbanken ist die Protokollverwaltung. Protokolldateien werden nacheinander und nicht zufällig geschrieben. Mit einer großen Datenbank können Sie Ihre Protokolldatei einem einzelnen Festplattenarray zuordnen, um maximale sequenzielle Leistung zu erzielen. Wenn Sie 50 Datenbanken auf demselben Array haben, handelt es sich bei den Daten effektiv um zufällige E / A-Vorgänge, was zu einer weitaus schlechteren Leistung führt.

Das Gleiche gilt in gewissem Maße für Datendateien, aber da sie vom Checkpoint-Prozess asynchron geschrieben werden, ist dies weniger problematisch, da es sich meistens um kleinere sequentielle Schreibvorgänge handelt.

Wir verwenden eine ähnliche Architektur, und obwohl ich die Vorteile der Patchbarkeit und der Ausführung verschiedener Versionen wirklich genieße, würde ich mich definitiv für eine Lösung mit mehreren Mandanten entscheiden, wenn ich sie noch einmal machen würde.

Mark S. Rasmussen
quelle
2

Was wären die Auswirkungen auf die Leistung, wenn wir die Kunden in einer einzigen Datenbank zusammenfassen würden?

Nur Sie können diese Frage beantworten. Wenn Sie Ihre Umgebung oder Ihre Serverkonfigurationen nicht kennen, ist dies schwer vorherzusagen. Es gibt Tools, mit denen Sie Ihre aktuellen Konfigurationen einem Stresstest unterziehen können, um festzustellen, mit welcher Grenze sie umgehen können.

Sie sollten ein Skript einrichten, um die Leistungsindikatoren über einen bestimmten Zeitraum hinweg zu erfassen, damit Sie eine gute Basis Ihrer Systeme haben. Sie können dies verwenden, um Ihre Spitzenverkehrszeiten für jeden einzelnen zu ermitteln. Sie können eine schnelle Google-Suche nach "SQL Server-Leistungsindikatoren" durchführen, die Sie in die richtige Richtung weisen. Ich bin mir auch sicher, dass Stackexchange auch viele Posts enthält.

BEARBEITEN Dies wäre zunächst ein guter Link für die Leistungsindikatoren.

Aaron Bertrand
quelle
Vielleicht muss ich die Frage umformulieren - ich bin nach einer allgemeinen Antwort und gebe eine Anleitung, was als der beste Ansatz angesehen wird, und einen Überblick über die Gründe dafür. Ihre Antwort scheint eine Art Antwort vom Typ "Es hängt davon ab" zu sein, die mir zwar wahrscheinlich zutreffend ist, mir aber nicht wirklich hilft :(
Dog Ears
0

Ich weiß, dass diese Frage speziell nach Auswirkungen auf die Leistung fragt, und hier gibt es bereits gute Antworten, aber ich denke, es wäre nicht angebracht, ein Thema nicht zu erwähnen, das noch nicht angesprochen wurde, wenn es um mandantenfähige Lösungen geht: Sicherheit .

Wenn Sie Daten für mehrere Kunden in einer einzigen Datenbank speichern, müssen Sie hinsichtlich der Sicherheit äußerst vorsichtig sein, nicht nur in der Datenbank selbst, sondern auch in den Anwendungen. Im Allgemeinen sollte ein Kunde niemals in der Lage sein, die Daten eines anderen Kunden zu sehen. Ich kenne Ihr Geschäft nicht, aber das ist normalerweise der Fall.

Bei der Architektur einer Anwendung ist das Erstellen von Sicherheitsgrenzen wünschenswert. Wenn Ihr Team also einen kleinen Fehler macht, ist bereits ein Fallback integriert, um zu verhindern, dass schlechte Dinge passieren. Eine Datenbank ist eine Art von Sicherheitsgrenze.

Diese Trennung (eine Geschäftsanforderung, die möglicherweise besteht oder nicht) muss mit Ihrem Plan zur Verwaltung der Daten, der Leistung usw. in Einklang gebracht werden, obwohl Sicherheitsanforderungen alles andere übertreffen können (und sollten), wenn dies vom Unternehmen als wichtig genug erachtet wird .

Ja, es hört sich so an, als gäbe es hier ein Echo, aber es hängt wirklich von Ihrer genauen Situation ab, um die beste Entscheidung zu treffen. Wir können Ihnen nur Ideen geben, um zu diesem Schluss zu kommen.

Jon Seigel
quelle