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?
sql-server
performance
Hundeohren
quelle
quelle
Antworten:
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.
Mögliche Gewinne
Mögliche Risiken
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.
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.
quelle
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.
quelle
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.
quelle
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.
WennIhr 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.
quelle