PRODSouveräne europäische BaaS-PlattformÖffnen Sie das Dashboard →

Leistung · 11 Min. Lesezeit

Dedizierte vs. gemeinsam genutzte Datenbank: Leistung und Isolation

Affane Daylami · Fondateur · 31. Mai 2026

Zurück zum Blog

Eine gemeinsame Datenbank bedeutet nicht, dass Ihre Daten mit denen eines anderen Kunden vermischt werden. Das bedeutet, dass Ihre Datenbank auf einem Postgres-Server läuft, der mit anderen Datenbanken geteilt wird. Die eigentliche Frage lautet also nicht: „Sind meine Daten isoliert?“ » aber „sind meine Ressourcen?“ „. CPU, Arbeitsspeicher, Verbindungen und Festplattendurchsatz können sich aufgrund eines lauten Nachbarn verschlechtern, selbst wenn jeder Mandant über eine eigene Datenbank, eine eigene Tabelle und eigene Richtlinien verfügt.

Dieser englische Text wurde automatisch aus dem französischen Original generiert und wurde noch nicht überprüft.
Diese Seite wurde automatisch übersetzt. Maßgeblich ist die englische Version.

In diesem Artikel werden die am häufigsten dokumentierten Postgres-Mandantenmodelle (gemeinsam genutztes Schema, pro Mandantbasis, dedizierter Cluster, auch Datenbank pro Mandant vs. gemeinsam genutzte Datenbank genannt) verglichen, der noisy neighbor-Mechanismus erläutert und anschließend detailliert beschrieben, wie Aurabase sein eigenes zweistufiges Modell implementiert, das im Bereitstellungscode überprüft wird. Informationen zur Methodik, die wir vor der Veröffentlichung einer Leistungszahl anwenden, finden Sie in unserer Backend-Benchmark-Methodik .

Wenn Sie nach der Frage des Datenlecks zwischen zwei Clients (RLS, Richtlinien, service_role) suchen, ist dies nicht der Schwerpunkt dieses Artikels: Unser RLS-Vergleich und die dedizierte Datenbank nach Projekt behandeln diese logische Isolation im Detail. Hier geht es um physische Ressourcen: CPU, IO, Verbindungen, Cache.

Das Wesentliche

  • Eine gemeinsam genutzte Datenbank ist nicht unbedingt ein gemeinsames Schema: Aurabase stellt jedem Projekt eine eigene Postgres-Datenbank zur Verfügung, auch auf seinen Standardebenen, indem nur der Cluster gemeinsam genutzt wird.
  • noisy neighbor beeinträchtigt die physischen Ressourcen (CPU, IOPS, Verbindungen, Autovacuum), nicht die Vertraulichkeit der Daten: RLS löst das Problem nicht, das ist nicht seine Rolle.
  • Der Aurabase-Bereitsteller leitet an genau zwei Architekturen weiter, die im Code verifiziert sind: FullyDedicated (gesamter CNPG-Cluster für ein Projekt reserviert, Unternehmensebene) oder SharedClusterDedicated (dedizierte Basis auf dem CNPG-Cluster der Organisation, niemals mit einer anderen Organisation geteilt).
  • Ein Aurabase-Flottencluster hat standardmäßig einen beobachteten Kapazitätsschwellenwert von 1000 Basen pro Cluster, konfigurierbar, bei dessen Überschreitung die Empfehlung lautet, zu einem dedizierten Cluster zu migrieren.
  • Die richtige Wahl hängt von Ihren tatsächlichen Einschränkungen ab (Compliance, Vorhersehbarkeit des Datenverkehrs, Budget) und nicht von dem Reflex „Dediziert ist immer besser“.
#
Die Modelle

Drei Postgres-Verwaltungsmodelle, von den am häufigsten genutzten bis zu den isoliertesten

In der offiziellen Dokumentation von Microsoft zur Architektur von mandantenfähigen SaaS-Anwendungen werden drei Mandantenmodelle unterschieden, die im Allgemeinen als Silo (dedizierte Ressourcen pro Mandant), Pool (vollständig gemeinsam genutzte Ressourcen) und Bridge (eine Mischung aus beiden, einige isolierte Mandanten, andere gemeinsam genutzt) bezeichnet werden. Diese drei Modelle gelten direkt für Postgres, auf Schema-, Datenbank- oder gesamter Clusterebene.

Konkret ergeben sich für ein Postgres-Backend drei unterschiedliche Architekturen. Das gemeinsam genutzte -Schema (eine einzelne Basis, eine tenant_id-Spalte, RLS-Richtlinien, die die Zeilen filtern) ist das am häufigsten verwendete Poolmodell in Leitfäden für mehrere Mandanten: wirtschaftlich, aber die Grenze zwischen zwei Clients wird zu einem SQL-Ausdruck, der Tabelle für Tabelle ausgewertet wird. Die -Basis pro Mandant auf einem gemeinsam genutzten Cluster ist ein Zwischenbrückenmodell: Jeder Mandant hat seine eigene Postgres-Basis (ein echter CREATE DATABASE-Befehl), aber mehrere Basen existieren gleichzeitig auf demselben physischen Cluster und teilen sich daher CPU, E/A und Verbindungen. Der -Cluster, der vollständig pro Mandant dediziert ist, ist das vollständige Silo-Modell: vollständig isolierte CPU-, RAM- und E/A-Ressourcen, im Allgemeinen für Mandanten mit hohen Compliance- oder Lastproblemen reserviert.

ModellRessourcenisolierungSpeicherisolierungOperativer Aufwand
Freigegebenes Schema (tenant_id + RLS)KeineKeine (Gemeinschaftstisch)Minimal (1 Basis zum Betrieb)
Pro Mandant, gemeinsam genutzter ClusterTeilweise (Cluster-CPU/IO)Gesamt (eigene Basis)Moderat (N Basen, 1 Cluster)
Vollständig dedizierter Cluster pro MandantInsgesamtInsgesamtHoch (1 Cluster pro Mandant)

Silo-/Pool-/Bridge-Terminologie: offizielle Microsoft-Dokumentation, mehrinstanzenfähige SaaS-Architekturmuster (Azure Architecture Center).

Das Zwischenmodell, Basis pro Mandant auf einem gemeinsam genutzten Cluster, fehlt oft in den Leitfäden, die die Wahl binär zwischen „einer einzigen Basis für alle“ und „ein Server pro Client“ darstellen. Dies ist jedoch diejenige, die Aurabase standardmäßig verwendet (siehe unten).

Die Wahl zwischen diesen drei Modellen ergibt sich bei jeder Entscheidung über eine Multi-Tenant-Architektur, nicht nur bei einem BaaS-Anbieter: Ein Team, das sein eigenes SaaS-Backend auf verwaltetem Postgres aufbaut (RDS, Cloud SQL oder eine selbst gehostete Instanz), führt genau die gleiche Entscheidung durch, wobei dieselben Konfliktmechanismen im Spiel sind, sobald mehrere Clients auf derselben physischen Instanz platziert werden.

#
Der Mechanismus

Der laute Nachbar: Was verschlechtert sich, wenn Ressourcen geteilt werden?

Ein noisy neighbor (Noisy Neighbor) ist ein Mandant, der einen unverhältnismäßig großen Anteil der gemeinsam genutzten Ressourcen einer Infrastruktur verbraucht, zum Nachteil anderer Mandanten auf demselben Server. Der Begriff stammt aus der öffentlichen Cloud, bezieht sich aber direkt auf einen gemeinsam genutzten Postgres-Cluster: Eine Datenbank kann die Leistung anderer Datenbanken beeinträchtigen, ohne jemals deren Daten zu berühren.

Sechs Mechanismen kommen in der Produktion am häufigsten vor:

  • CPU-Konflikt: Eine teure Abfrage (Join ohne Index, massive Sortierung) verbraucht CPU-Zyklen, die der Kernel zwischen allen aktiven Datenbanken im Cluster teilt.
  • IOPS-Konflikt: Eine Sicherung, ein VACUUM FULL oder ein massiver Import überlastet den Festplattendurchsatz des Clusters und verlangsamt Lese- und Schreibvorgänge in anderen Datenbanken.
  • Verbindungserschöpfung: max_connections begrenzt die Anzahl der aktiven Verbindungen auf der gesamten Clusterebene, nicht pro Basis. Eine zu weit geöffnete Basis verringert den Spielraum anderer.
  • Autovacuum-Konflikt: Autovacuum wird mit einer begrenzten Anzahl von Workern pro Cluster ausgeführt; Eine Datenbank mit einer hohen Schreibrate kann die Bereinigung der Tabellen einer anderen Datenbank verzögern.
  • Cache-Räumung: shared_buffers ist ein einzelner Speicher für den gesamten Cluster; Eine Datenbank mit einem großen Arbeitssatz kann die zwischengespeicherten Seiten einer kleineren benachbarten Datenbank entfernen.
  • Gemeinsame Wartungsfenster: Backup, Replikat-Failover oder größeres Upgrade gelten für den gesamten Cluster, nicht auf Basis pro Basis.
Mit vier Projekten gemeinsam genutzter Cluster im Vergleich zu Cluster, der einem einzelnen Projekt gewidmet istAuf der linken Seite beherbergt ein gemeinsam genutzter CNPG-Cluster vier Basen (Projekt A bis D), die alle auf denselben Pool von CPUs, IOPS und gemeinsam genutzten Verbindungen konvergieren, sodass es zu Konflikten zwischen ihnen kommen kann. Auf der rechten Seite hostet ein dedizierter CNPG-Cluster nur ein Projekt, wobei CPU, IOPS und Verbindungen reserviert sind, sodass keine externen Konflikte möglich sind.Gemeinsamer ClusterProjekt AProjekt BProjekt CProjekt DCPU · Geteilte IOPSgemeinsame VerbindungenMöglicher Konflikt zwischen A, B, C, DDedizierter ClusterIhr ProjektCPU · Reservierte IOPSreservierte VerbindungenKeine äußere Zurückhaltung

Strukturdiagramm, kein Messergebnis: Für diese beiden Topologien wurden bisher keine vergleichenden Leistungszahlen veröffentlicht.

Das Verbindungsbudget ist oft das sichtbarste Symptom in der Produktion, noch vor der Latenz. Dies ist das ausführliche Thema unseres max_connections Tuning-Guides und unseres Vergleichs PgBouncer, Supavisor und PgCat.

Ein Transaktionsmodus-Pooler (PgBouncer, Supavisor, PgCat) mildert die Verbindungserschöpfung, beseitigt jedoch keine CPU- oder IOPS-Konflikte: Er verwendet vorhandene Serververbindungen wieder und fügt dem Cluster keine zusätzlichen CPU-Kerne oder Festplattendurchsatz hinzu. Unser -Artikel zum Transaktions-Pooling-Modus beschreibt detailliert, was dieser Modus tatsächlich ändert und was nicht.

#
Die Grenze

RLS isoliert Daten, keine Ressourcen

Sicherheit auf Zeilenebene löst ein anderes Problem: Sie verhindert, dass eine Abfrage auf logischer Ebene die Zeilen eines anderen Mandanten liest oder ändert. Es reserviert keinen CPU-Zyklus, keinen Verbindungssteckplatz und keinen Festplattendurchsatz für einen bestimmten Mandanten.

Zwei Mieter können vollkommen wasserdichte RLS-Richtlinien haben und sich gleichzeitig gegenseitig herabsetzen: Der laute Nachbar ist ein Problem der physischen Ressourcen, nicht der Zugriffsrechte. Eine Verwechslung der beiden führt zu einem falschen Gefühl der Betriebssicherheit, sobald EPIRB installiert ist.

Infos

Informationen zur logischen Isolierung (RLS-Richtlinien, service_role, Grenze zwischen Projekten auf der Sicherheitsseite) finden Sie in unserem speziellen Artikel: RLS und dedizierte Basis pro Projekt, die Wahl der mandantenfähigen Isolierung von Aurabase. Dieser Artikel bleibt auf der Ebene der physischen Ressourcen.

#
Im Code

Das Aurabase-Modell, im Code verifiziert

Der Provisioner-Code (aura-provisioner) dokumentiert genau zwei mögliche Architekturen für ein aktives Postgres-Projekt aus einer Bereitstellungskonsolidierung, die der Code als Aufgabe 12 bezeichnet: FullyDedicated und SharedClusterDedicated. Ältere schemabasierte Modelle wurden aus dem Bereitstellungspfad entfernt.

Die Ebene enterprise löst FullyDedicatedaus: einen gesamten CNPG-Cluster, der für dieses einzelne Projekt reserviert ist. Alle anderen Ebenen (Free, Pro, Team) führen zu SharedClusterDedicated: einer vollwertigen Postgres-project_<uuid>-Datenbank im CNPG-Cluster der Projektorganisation. Es handelt sich daher nicht um ein gemeinsames Schema: Selbst bei einem Standardplan ist Ihre Datenbank eine vollständige Postgres-Datenbank und nicht eine Zeile unter anderen in einer gemeinsamen Tabelle. Geteilt wird der Cluster (CPU, RAM, Festplatte, Verbindungen), nicht die Basis selbst.

Der CNPG-Cluster einer Organisation wird erstellt, wenn ihr erstes Postgres-Projekt bereitgestellt wird, und hostet niemals ein Projekt einer anderen Organisation, eine Designauswahl, die auf Codeebene gesperrt ist (org_cluster.rs, Postgres-Beratungssperre durch die Organisation bei der Erstellung). Der einzig mögliche laute Nachbar auf dem gemeinsamen Aurabase-Landeplatz ist daher ein anderes Projekt Ihrer eigenen Organisation, niemals das eines Drittkunden.

fleet.rsrust
/// Nominale Kapazität (Anzahl der Projektbasen) eines Organisationsclusters.
/// Beobachtbarkeitsschwelle: Richten Sie die Organisation darüber hinaus auf FullyDedicated aus.
/// Steuerbar über FLEET_CLUSTER_CAPACITY (Standard 1000, begrenzt [1, 1_000_000]).
pub fn fleet_cluster_capacity() -> i32 {
    std::env::var("FLEET_CLUSTER_CAPACITY")
        .ok()
        .and_then(|v| v.parse::<i32>().ok())
        .filter(|n| (1..=1_000_000).contains(n))
        .unwrap_or(1000)
}
2
Mögliche Architekturen
FullyDedicated oder SharedClusterDedicated, keine anderen
1000
Basen/Cluster (Standard)
Konfigurierbar, begrenzt zwischen 1 und 1.000.000
S. 16
Postgres-Version
Noch nicht PG 17 für Mieter-/Flottencluster

Aurabase-verwaltete PostgreSQL-Cluster-Architekturspezifikationen.

Dieser Schwellenwert von 1000 Basen pro Cluster ist kein fester Grenzwert: Es handelt sich um einen Beobachtbarkeits-Benchmark, der eine Empfehlung zur Migration zu FullyDedicatedauslöst, nicht um eine automatische Blockierung. Es werden keine Platzierungsentscheidungen mehr getroffen, es ist jetzt nur noch ein Cluster pro Organisation möglich.

Jeder Cluster, ob dediziert oder Flotte, stellt in beiden Topologien einen CNPG-Pooler (PgBouncer) bereit, der einen Teil des Drucks auf aktive Verbindungen absorbiert. Was dieser Pooler tatsächlich für Ressourcenkonflikte ändert, wird unten detailliert beschrieben.

Auch die CPU-/RAM-Größe eines gemeinsam genutzten Clusters ist zwischen Organisationen nicht einheitlich: Sie wird über eine dedizierte Funktion (FleetSizing::from_org_plan, überprüft in org_cluster.rs) von der Ebene der Organisation abgeleitet und nicht von einer einzigen Größe, die auf alle Ebenen angewendet wird. Eine Organisation auf Teamebene dimensioniert ihren Cluster nicht auf die gleiche Weise wie eine Organisation auf freier Ebene.

Diese beiden Architekturen laufen auf PostgreSQL 16, nicht auf Version 17, was in der Docker-Datei des in der Produktion verwendeten CNPG-Images überprüft wird. Diese Wahl der Version hat ihre eigenen Auswirkungen auf die Optimierung, die in unserem Postgres 16 vs. 17 vs. 18-Vergleichdetailliert beschrieben werden.

#
Die Entscheidung

Wenn ein Pooling ausreicht, wenn eine dedizierte Nutzung notwendig wird

Scharfsinn

Pooling ist kein billiger Kompromiss. Dies entspricht dem Datenverkehr der überwiegenden Mehrheit der Projekte in Entwicklung, Einführung oder mäßigem Wachstum, bei denen ein dedizierter Cluster zusätzliche Kosten ohne messbaren Nutzen bedeuten würde.

SignalGeteilt reichtDediziert empfohlen
Formale Einhaltung der physischen Isolation (Gesundheit, Personalwesen, öffentlicher Sektor)NeinJa
Vorhersehbarer Verkehr, mäßige SpitzenJa
Unvorhersehbare und anhaltende SpitzenlastGefahr der ZurückhaltungJa
Knappes Budget, Produkt in der ValidierungsphaseJa
Vertragsklausel (DPA), die eine dokumentierte Isolierung erfordertNeinJa

Für Projekte, die einer vertraglichen Verpflichtung zur dokumentierten physischen Isolierung unterliegen, wird auf unseren Seiten DPA und Compliance detailliert beschrieben, was die einzelnen Ebenen abdecken.

Der Nachteil des Basis-für-Mandanten-Modells, der von mehreren Schema-Migrationsmanagement-Tools wie Bytebase hervorgehoben wird, ist eher betrieblicher als technischer Natur: Jede Migration muss auf jeder Basis einzeln angewendet und überprüft werden, selbst wenn sie im selben Cluster koexistieren. Ein vollständig dedizierter Cluster beseitigt diese Kosten nicht, sondern erhöht sie sogar: eine Migration pro Cluster zur unabhängigen Überwachung und nicht nur eine.

Auf mandantenfähige Softwarearchitektur spezialisierte Ressourcen wie CodeOpinion stellen diesen Zwischenansatz (pro Mandant auf gemeinsam genutzter Infrastruktur) regelmäßig als einen vernünftigen Kompromiss zwischen dem gemeinsam genutzten Schema und dem vollständig dedizierten Cluster dar und nicht als binäre Wahl zwischen den beiden Extremen.

Der Wechsel von Shared zu Dedicated erfordert kein Umschreiben eines Schemas oder einen Wechsel der Engines: In beiden Fällen handelt es sich um Postgres mit derselben pg_dump / pg_restore-Kette wie in unserem Migrationsleitfaden Supabase zu Aurabasebeschrieben. Das Ändern der Ebene bleibt ein Umschaltvorgang und kein Umschreiben der Anwendung.

#
FAQs

Häufig gestellte Fragen

Kann eine gemeinsam genutzte Aurabase-Datenbank durch ein Projekt eines anderen Unternehmens verlangsamt werden?+
Nein. Der gemeinsam genutzte CNPG-Cluster von Aurabase gehört zu einer einzelnen Organisation und hostet niemals ein Projekt einer Drittorganisation, verifiziert im Provisioner-Code (org_cluster.rs). Der einzig mögliche laute Nachbar auf dieser Ebene ist ein anderes Projekt Ihrer eigenen Organisation.
Verwendet die gemeinsame Ebene von Aurabase ein gemeinsames Schema mit einer Tenant_ID-Spalte?+
Nein. Jedes Projekt erhält seine eigene Postgres-Datenbank (<9>project_<uuid></9>), auch auf der Free-, Pro- und Team-Ebene. Gemeinsam genutzt wird der CNPG-Cluster (CPU, RAM, Festplatte, Verbindungen), nicht die Basis selbst oder ihr Diagramm.
Woher weiß ich, ob mein Projekt einen dedizierten Cluster benötigt?+
Drei Signale tauchen am häufigsten auf: eine formelle Compliance-Anforderung zur physischen Isolierung von Ressourcen, anhaltender und unvorhersehbarer Datenverkehr, der die verfügbaren Verbindungen regelmäßig überlastet, oder eine Vertragsklausel vom Typ DPA, die eine dokumentierte Isolierung erfordert. Unterhalb dieser Schwellenwerte bleibt das Pooling in den meisten Fällen wirtschaftlich sinnvoller.
Ist der Schwellenwert von 1000 Basen pro Cluster ein fester Grenzwert?+
Nein, es handelt sich um eine Beobachtbarkeitsschwelle, nicht um eine automatische technische Blockade. Es ist über die Variable FLEET_CLUSTER_CAPACITY konfigurierbar (Standard 1000, begrenzt zwischen 1 und 1.000.000) und wird verwendet, um zu signalisieren, dass eine Organisation auf einen dedizierten Cluster ausgerichtet sein sollte.
Reicht EPIRB aus, um laute Nachbarn zu verhindern?+
Nein. Das RLS filtert die von einer Abfrage sichtbaren Zeilen. Es reserviert weder CPU noch IOPS noch Verbindungen zu einem bestimmten Mandanten. Zwei Mandanten mit absolut wasserdichten RLS-Richtlinien können sich gegenseitig beeinträchtigen, wenn sie sich denselben physischen Cluster teilen. Lesen Sie unseren Artikel über RLS und dedizierte Basis pro Projekt für den Teil der logischen Isolation.
Warum kostet Pooling weniger als ein dedizierter Cluster?+
Denn die Fixkosten eines Postgres-Clusters (CPU, RAM, reservierter Speicher, Backups) werden auf alle Stützpunkte der Organisation verteilt, die ihn belegen, anstatt vollständig von einem einzelnen Projekt bezahlt zu werden. Ein dedizierter Cluster bleibt auch dann in Rechnung gestellt, wenn die tatsächliche Projektlast gering ist, was ihn zu einer rationalen Wahl macht, insbesondere wenn eine Compliance oder ein Verkehrssignal dies rechtfertigt, und nicht vorher.
#
Fazit

Woran Sie sich erinnern sollten

Eine dedizierte Basis und eine gemeinsam genutzte Basis stehen nicht im Widerspruch zur Datensicherheit: Beide Modelle können einen Mandanten auf logischer Ebene korrekt von einem anderen isolieren. Sie stehen sich in Bezug auf physische Ressourcen (CPU, IOPS, Verbindungen, Cache, Wartungsfenster) gegenüber. Es ist dieser Plan, der einen lauten Nachbarn definiert, nicht eine schlecht geschriebene RLS-Richtlinie.

Das im Bereitstellungscode verifizierte Aurabase-Modell behält standardmäßig einen Zwischenkompromiss bei: eine dedizierte Postgres-Datenbank pro Projekt auf einem gemeinsam genutzten Cluster, die jedoch ausschließlich einer einzelnen Organisation vorbehalten ist, wobei ein vollständig dedizierter Cluster für die Geschäftsebene reserviert ist. Die richtige Wahl hängt von Ihren tatsächlichen Einschränkungen ab und nicht von einem Reflex, bei dem die dedizierte Lösung immer die beste Option wäre.

BEREIT ZUM EINSATZ?

Ihr Backend in fünf Minuten.

Keine Kreditkarte erforderlich · 500 MB kostenlos · 50.000 MAU