2009-06-28 18 views
10

Wir schreiben ein auf ASP.Net/C# basierendes Programm, auf das potentiell mehrere Unternehmen zugreifen können (jeweils mit separaten Anmeldedaten und Daten). Wir denken daran, mehrere SQL Server 2008-Datenbanken (gleiche Instanz) für jeweils ein Unternehmen zu haben. Das C# -Programm, das auf die Datenbank zugreift, ist jedoch identisch und erstellt auf der Basis der Datenbank, auf die der Kunde zugreifen wird, die entsprechende Verbindungszeichenfolge.Maximale Anzahl von Datenbanken in SQL Server 2008

Wie viele solcher Datenbanken kann jede Leistungsverschlechterung in der einzigen Instanz des SQL Server erstellt werden aufgrund bevor man:

  • Grenze für die Verbindungen, da jede Verbindung (nicht sicher, ob es gebündelt werden für den Zugriff auf verschiedene Datenbanken) wird mit einer anderen Verbindungszeichenfolge erstellt.

  • Beschränkung auf die Anzahl der Datenbanken, wird es durch die Hardware oder SQL-Server begrenzt 2008 wird eine Verschlechterung zeigen, wenn die Anzahl der Datenbanken auf 100 steigt?

Alles andere, das ich vermisse?

Vielen Dank für Ihre Zeit

Antwort

13
  • Max-Datenbanken pro SQL Server-Instanz: 32.767
  • Max Benutzerverbindungen: 32.767

(Von hier aus: Maximum Capacity Specifications for SQL Server)

Beide sind praktisch durch die Menge an RAM die SQL s begrenzt die Maschine hat, lange bevor sie diese Maximalwerte erreicht.

Von den beiden vermute ich, Benutzerverbindungen werden das größere Problem sein, wenn Sie Tausende von Benutzern haben (wie Sie Verbindungspooling nicht verwenden).

auf den SQL Server-Computer den aktuellen Wert zu finden:

SELECT @@MAX_CONNECTIONS AS 'Max Connections' 

Aktualisiert Kommentare als Antwort auf MSN Messenger:
Es ist nicht wirklich die Anzahl der Datenbanken, die das Problem ist, aber die Anzahl der häufig zugegriffen Seiten in diesen Datenbanken. Wenn alle "heißen" Seiten in den Speicher passen (und sehr wenige physische Lesevorgänge auftreten), dann ist alles gut.

+0

Vielen Dank für Ihre Kommentare Irgendwelche Ideen, wie die SQL-Server-Leistung verschlechtert wird, wenn wir die Anzahl der Datenbanken erhöhen. Angenommen, wir vergleichen eine einzelne Datenbank, in der die Daten unter Verwendung von Primär-/Fremdschlüsseln partitioniert sind, und zwischen dem Zeitpunkt, zu dem sich jedes Unternehmen in einer anderen Datenbank befindet. Auch wird SQL Server zusammen mit ado.net Verbindungspool nicht tun, wenn Sie Verbindungen zu verschiedenen Datenbanken erstellen, aber es von der gleichen Instanz des asp.net-Prozesses tun? – Samuel

+2

@ Samuel: vorschlagen, dass Sie diese Fragen zu Ihrer ursprünglichen Frage hinzufügen. (1) Es ist nicht wirklich die Anzahl der Datenbanken, sondern die Anzahl der Seiten, auf die in diesen Datenbanken häufig zugegriffen wird. Wenn alle "heißen" Seiten in den Speicher passen (und sehr wenige physische Lesevorgänge auftreten), dann ist alles gut. (2) Nein. Eine Verbindung zu einer anderen DB ist eine andere Benutzerverbindung. –

2

Wenn mehrere Datenbanken für mehrere Clients vorhanden sind, kann dies leicht zu einem Wartungsalarm führen. Wenn die Anwendung die gleiche ist, nehme ich an, dass das DB-Design das gleiche wäre. Wir haben ein ähnliches Projekt vor ein paar Jahren durchgeführt, aber wir haben uns entschieden, Daten in derselben Datenbank zu vermischen und dann ein robustes Sicherheitsmodell zu entwickeln, um sicherzustellen, dass ein Kunde die Daten eines anderen Kunden nicht sieht oder ändert.

Ich kann mit Stolz sagen, dass das Projekt ein Erfolg war und heute, da wir sprechen, Daten von mehr als 100 verschiedenen Kunden enthält und einwandfrei funktioniert.

Raj

+2

Das ist wahr, aber eine Sache, die ich dachte, ist die Flexibilität der Kunden an eine andere Instanz zu ändern, wenn der Server geladen wird ... Auch dachte ich, dass separate Datenbank mit schneller die Verarbeitung machen kann, weil es nicht zu viele sein Datensätze in den einzelnen Datenbanken. Wir sprechen von etwa 100.000 Einträgen pro Unternehmen. – Samuel

+2

Wenn Sie alleiniger oder definitiv großer Benutzer der einzelnen Datenbank oder Sammlung von Datenbanken sind, sollte die Wartung fast automatisch sein, wenn sie aus dem Entwicklungsprozess kommt. Wenn Sie es nicht automatisieren können, wird es zumindest mit Problemen zusammenfallen. Ein gut geregelter Bereitstellungsprozess sollte nicht die Wartung mehrerer identischer Datenbanken zum Albtraum machen. – ProfK

4

Sie sollten auch bedenken, dass Verbindungen werden durch Verbindungszeichenfolge gebündelt werden - in Ihrem Fall, werden Sie separate Pools für jeden Kunden DB erhalten. Das kann nicht schlecht sein, wenn Sie viel Traffic für jeden Kunden haben, aber wenn Sie nur wenig Datenverkehr zu vielen verschiedenen Datenbanken haben, werden Sie nicht den vollen Vorteil des Poolings bekommen.