Verstehen der Architektur von PostgreSQL

Abgeschlossen

PostgreSQL ist ein Managementsystem für relationale Datenbanken (RDMS) mit Client/Server-Architektur. PostgreSQL unterstützt auch eine Vielzahl von Erweiterungen, z. B. die Citus-Erweiterung der Azure Cosmos DB for PostgreSQL-Option. Nachdem eine Erweiterung in die Datenbank geladen wurde, funktioniert sie wie jedes integrierte Feature.

PostgreSQL hat auch eine eigene Abfragesprache namens pgsql. Darüber hinaus unterstützt PostgreSQL prozedurale Sprachen wie Ruby on Rails.

Screenshot der PostgreSQL-Erweiterungen und -Sprachen.

Client/Server-Architektur

PostgreSQL basiert auf einer Client/Server-Architektur. Der Server speichert und verwaltet Daten und gibt sie an Clientprogramme zurück. Clientprogramme fordern Daten mittels pgSQL oder einer der von PostgreSQL unterstützten prozeduralen Sprachen an, wie z. B. PL/pgSQL.

Eine PostgreSQL-Sitzung besteht aus drei Teilen:

  • Postmaster
  • Clientanwendung
  • Beim Server

Postmaster

Der Postmaster ist der beaufsichtigende Daemonprozess zum Verwalten eines PostgreSQL-Servers. Der Postmasterdaemon verwaltet die Kommunikation zwischen den verschiedenen Serverprozessen, einschließlich Initialisierung des Servers, Herunterfahren des Servers, Verarbeiten von Verbindungsanforderungen und anderer Hintergrundprozesse. In Azure Database for PostgreSQL haben Sie keinen Zugriff auf das Dateisystem oder den Postmasterprozess.

Clientanwendungen

Clients führen Abfragen aus und interagieren mit Datenbanken auf einem Azure Database for PostgreSQL-Server. Zum Ausführen von Abfragen benötigen Sie ein Clienttool wie Azure Data Studio, DBeaver, pgAdmin oder psql. Im nächsten Modul erfahren Sie mehr über Clienttools.

Serverprozesse

Cluster: Ein einzelner PostgreSQL-Server kann mehrere Benutzerdatenbanken hosten. In PostgreSQL wird diese Sammlung von Datenbanken als Cluster bezeichnet. Jede Datenbank ist von den anderen getrennt, und Benutzer und Anwendungen interagieren mit einer einzelnen Datenbank. Benutzer werden auf Cluster- oder Serverebene erstellt.

Daten dieser Datenbanken werden im Datenverzeichnis des Clusters namens PGDATA gespeichert. Das Datenverzeichnis PGDATA enthält eine Datei mit der aktuell ausgeführten Version von PostgreSQL, pg_tblspc, die Links zu Tabellenbereichen enthält, und die Datei pg_xlog mit den Write-Ahead-Protokolldateien.

Hinweis

Azure Databases for PostgreSQL ist ein Dienst, der Speicher und das zugrunde liegende Dateisystem verwaltet. Als Benutzer dieses Servers haben Sie keinen direkten Zugriff auf das Verzeichnis PGDATA oder eines seiner Unterverzeichnisse.

Zusätzlich zu den von Ihnen erstellten Datenbanken gibt es drei Systemdatenbanken:

  • postgres: die Standarddatenbank. Nachdem Ihr Server erstellt wurde, stellen Sie eine Verbindung mit der Postgres-Datenbank her.
  • azure_maintenance: die Datenbank, die Dienstprozesse verwaltet. Sie haben keinen direkten Zugriff auf diese Datenbank.
  • azure_sys: die Datenbank des Abfragespeichers. Sie dürfen die Datenbank azure_sys oder ihre Schemas nicht verändern. Änderungen an azure_sys führen dazu, dass der Abfragespeicher und andere Leistungsfeatures nicht mehr ordnungsgemäß funktionieren.

Schemas: Ein Schema ist eine benannte Gruppierung von Datenbankobjekten. Große Datenbanken mit vielen Objekten profitieren von der Organisation von Objekten in Schemas. Indem Sie z. B. ein Schema für vertriebsbezogene Objekte und ein Schema für clientbezogene Objekte erstellen, können Sie das richtige Objekt leichter finden.

Serverparameter: PostgreSQL verfügt über mehrere Konfigurationsdateien, die festlegen, wie die Datenbank-Engine arbeiten soll. Die Hauptkonfigurationsdatei von PostgreSQL heißt postgresql.conf.

In Azure Database for PostgreSQL wurden diese Konfigurationsdateien durch Serverparameter ersetzt, auf die Sie über das Azure-Portal oder die Azure-Befehlszeilenschnittstelle zugreifen können.

So können Sie Serverparameter im Azure-Portal anzeigen oder ändern

  1. Navigieren Sie zu Ihrem Azure Database for PostgreSQL-Server.
  2. Wählen Sie im linken Menü unter Einstellungen die Option Serverparameter aus.
  3. Über die Suchleiste können Sie die Liste der Parameter filtern oder die gewünschte Seitenzahl auswählen.

Speicher: Azure Database for PostgreSQL verwaltet den Datenspeicher für Sie und wird auf Serverebene bereitgestellt. Je nachdem, ob Sie den Computetarif „Burstfähig“, „Universell“ oder „Arbeitsspeicheroptimiert“ auswählen, können Sie bis zu 32 TB Speicherplatz nutzen. Um Speicherplatz bereitzustellen, navigieren Sie zu Ihrem Azure Database for PostgreSQL-Server und wählen im Abschnitt Übersicht Ihre Konfiguration aus. Der Abschnitt Compute + Speicher wird angezeigt. Wählen Sie unter „Speicher“ und „Speichergröße (in GB)“ mit dem Schieberegler die gewünschte Größe des bereitzustellenden Speichers aus.

Die Speichergröße, die Sie bereitstellen, bestimmt die E/A-Kapazität, die Ihrem Azure Database for PostgreSQL-Server zur Verfügung steht. Sie können Ihren E/A-Verbrauch im Azure-Portal oder mit Azure CLI-Befehlen überwachen. Die wichtigen zu überwachenden Metriken sind das Speicherlimit, der Speicherprozentsatz, der genutzte Speicher und der E/A-Prozentsatz.

Hinweis

Sie können die Speichergröße erhöhen, nachdem Sie Ihren Azure Database for PostgreSQL-Server erstellt haben, aber Sie können sie nicht verringern.

Tabellenbereiche: Bei einer lokalen Implementierung von PostgreSQL können Sie Tabellenbereiche erstellen, die über das Unterverzeichnis pg_tblspc mit dem Hauptspeicherbereich namens PGDATA verbunden sind. Azure Database for PostgreSQL unterstützt keine Tabellenbereiche. Alle Tabellen werden im Hauptspeicherbereich erstellt.

Systemkataloge: PostgreSQL enthält viele Systemtabellen und Sichten, in denen Informationen zu Datenbankobjekten gespeichert werden. Beispielsweise gibt pg_database alle Datenbanken auf einem Server zurück, und pg_class dient zum Speichern von Statistiken zu Tabellen.

Hinweis

Azure Database for PostgreSQL ermöglicht den Zugriff auf einige, aber nicht alle Systemkataloge.

Erweiterungen: PostgreSQL unterstützt eine Reihe von Erweiterungen, die die Kernfunktionalität der Datenbank-Engine erweitern. Diese Erweiterungen werden in einem Repository namens „PostgreSQL Extensions Network“ (PGXN) zur Verfügung gestellt.

Um eine PostgreSQL-Erweiterung verwenden zu können, muss sie in Ihrer Datenbank installiert sein. Zum Installieren einer Erweiterung führen Sie im Tool psql den Befehl CREATE EXTENSION aus, um die Erweiterung in Ihre Datenbank zu laden. Zum Beispiel:

SELECT create_extension('postgis');

Um herauszufinden, welche Erweiterungen Azure Database for PostgreSQL unterstützen, führen Sie die folgende Abfrage aus:

SELECT * FROM pg_available_extensions;

Alle Azure Database for PostgreSQL-Server weisen die Erweiterung pg_stat_statements auf. Diese Erweiterung ist bereits installiert, um Funktionalität für die Nachverfolgung von Ausführungsstatistiken von SQL-Anweisungen zu bieten. Der Serverparameter pg_stat_statements.track bestimmt, welche Anweisungen von der Erweiterung gezählt werden. Die Optionen sind:

  • Top: verfolgt alle Anweisungen nach, die direkt von Clients stammen (Standardeinstellung).
  • Keine: keine Anweisungen werden nachverfolgt.
  • Alle: verfolgt alle Anweisungen nach, einschließlich geschachtelter und von Funktionen aufgerufener Anweisungen.

Hinweis

Das Protokollieren jeder SQL-Anweisung ist für den Server mit einem zusätzlichen Leistungsaufwand verbunden. Wenn Sie pg_stat_statements nicht aktiv verwenden, legen Sie diesen Parameter auf „Keine“ fest. Beachten Sie auch, dass sich manche Überwachungsdienste von Drittanbietern pg_stat_statements nutzen können.

Abfrageoptimierer: PostgreSQL verwendet eine kostenbasierte Methode zur Abfrageoptimierung. Der Parser prüft die Abfragesyntax und teilt die Abfrage in verschiedene Teile auf. Der Parser erstellt eine Analysestruktur und übergibt die Abfrage an den Rewriter, der Regeln auf die Abfrage anwendet. Der Planner ermittelt den besten Weg zur Ausführung der Abfrage, ehe die Abfrage tatsächlich ausgeführt wird.

Back-End-Prozesse: PostgreSQL-Prozess je nach Transaktionsmodell. Wenn ein neuer Benutzer eine Verbindung herstellt, authentifiziert PostgreSQL den Benutzer und erstellt einen Back-End-Serverprozess, der sich um die Verbindung kümmert. Der Client interagiert nur mit dem Serverprozess, wenn er Abfragen stellt und Abfrageergebnisse empfängt.