PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Neue und sich entwickelnde PostgreSQL Enterprise-Funktionen mit aktuellen Versionen

PostgreSQL führte auch viele andere bahnbrechende Funktionen in den Versionen 10 bis 11, 12 und 13 ein, die es zu einem echten Konkurrenten von Oracle machen, wie z. B. Partitionierungsverbesserungen, parallele Abfragen und logische Replikation. In diesem Blogbeitrag stellen wir einige der neuen und bemerkenswerten PostgreSQL-Funktionen vor, die in neueren Versionen von PostgreSQL enthalten sind.

Partitionierungsfunktionen

Deklarative Partitionierung

Bis zur PostgreSQL-Version 9.4 gab es in PostgreSQL keine eigentliche Partitionierung. Dies wurde nur durch Tabellenvererbung erreicht, die nur sehr eingeschränkte Funktionalität und Leistungsvorteile bot. Ein Großteil der Funktionalität wird manuell über Trigger oder SQL-Befehle verwaltet. Beispielsweise mussten wir Trigger verwenden, um eine Zeile vor INSERT an die richtige Partition zu leiten. Wir müssen Indizes für jede Partition separat erstellen. PostgreSQL Version 10 brachte die deklarative Partitionierung hervor, aber wir mussten immer noch Constraints und Indizes für jede Partition erstellen.

PostgreSQL 11 wird komplett mit einer sehr beeindruckenden Reihe neuer Partitionierungsfunktionen geliefert, um sowohl die Leistung zu verbessern als auch zu helfen, partitionierte Tabellen für Anwendungen transparenter zu machen.

Logische Replikation partitionierter Tabellen

Mit PostgreSQL 13 wurde die Unterstützung für die logische Replikation partitionierter Tabellen eingeführt. Bisher waren Sie gezwungen, Partitionen einzeln auf Ihre Standbys zu replizieren. Jetzt können Sie jedoch automatisch alle Ihre Partitionen gleichzeitig replizieren

Partitionierungsmethoden

Die derzeit unterstützten Partitionierungsmethoden sind Bereich, Liste und Hash.

Schlüssel &Indizes

Volle Unterstützung für Fremdschlüssel auf partitionierten Tabellen wurde in PostgreSQL 12 hinzugefügt. PostgreSQL bietet auch Unterstützung für Primärschlüssel, Indizes und Trigger auf partitionierten Tabellen.

Standardpartition

PostgreSQL ermöglicht die Erstellung einer „Standard“-Partition zum Speichern von Daten, die mit keiner der verbleibenden Partitionen übereinstimmt. Oracle-Benutzer werden diese Funktion lieben, da sie in Oracle Database nicht verfügbar ist.

Reihenbewegung

UPDATE-Anweisungen, die eine Partitionsschlüsselspalte ändern, bewirken jetzt, dass betroffene Zeilen in die entsprechenden Partitionen verschoben werden.

Partitionsbereinigung

Verbessern Sie die SELECT-Leistung durch verbesserte Strategien zur Eliminierung von Partitionen während der Planung und Ausführung von Abfragen. Eine neue Methode zur Durchführung der Partitionsbeseitigung wurde hinzugefügt. Dieser neue Algorithmus kann übereinstimmende Partitionen ermitteln, indem er sich die WHERE-Klausel der Abfrage ansieht. Der vorherige Algorithmus überprüfte nacheinander jede Partition, um festzustellen, ob sie mit der WHERE-Klausel der Abfrage übereinstimmen könnte. Dies führte zu einer zusätzlichen Verlängerung der Planungszeit, da die Anzahl der Partitionen zunahm.

Partitionsbereinigung während der Abfrageausführung

Wie bei vorbereiteten Anweisungen sind Abfrageparameter vor der Ausführung nicht bekannt. Query Planner kann Partitionen während der Planungsphase nicht eliminieren, da die Parameter nicht bekannt sind. Der Executor führt also die Partitionsbereinigung während der Ausführung durch, um nur auf die Partitionen zuzugreifen, die mit den Parametern übereinstimmen.

Neue und sich entwickelnde Funktionen von PostgreSQL Enterprise mit aktuellen VersionenClick To Tweet

Indizierungsfunktionen

Abdeckungsindex

PostgreSQL ermöglicht es Ihnen jetzt, Nicht-Schlüsselspalten im btree-Index hinzuzufügen. Da Abfragen normalerweise mehr Spalten abrufen müssen als nur die, nach denen sie suchen, können Sie mit PostgreSQL einen Index erstellen, in dem einige Spalten nur „Nutzdaten“ und nicht Teil des Suchschlüssels sind. Es hilft, nur Index-Scans durchzuführen, um die erforderlichen Zeilen abzurufen.

Gleichzeitig neu indizieren

Ab PostgreSQL 12 ist es möglich, einen Index mit REINDEX CONCURRENTLY neu zu erstellen, ohne die Tabelle für Lese-/Schreibzugriffe zu sperren, genau wie mit dem Oracle-Befehl REBUILD INDEX.

Parallele Indexerstellung

Mit der parallelen Indexerstellung (eingeführt in PostgreSQL 11, derzeit nur für B-Tree-Indizes anwendbar) können Indizes bis zum Wert von max_parallel_workers schneller erstellt werden und der Wert für maintenance_work_mem groß genug sein, um mehrere zu speichern Kopien von Daten. Die parallele Indexerstellung kann Ihre Indexerstellungszeit erheblich verkürzen.

Deduplizierung von Daten in B-Tree-Indizes

Manchmal gibt es doppelte Einträge in einem Index. Dies bedeutet, dass ein Blattknoten in einem B-Tree-Index mit mindestens zwei Indexeinträgen im selben Index dieselben Daten für alle Indexspalten enthält. Mit der Hinzufügung der Deduplizierung in PostgreSQL 13 können Sie diese doppelten B-Tree-Indexeinträge gruppieren und in einem Gruppeneintrag zusammenfassen. Der Vorteil davon ist die Platzersparnis und die geringere Belastung von Festplatte und RAM, da Sie keine Spaltendaten duplizieren müssen. Doppelte Einträge führen auch zu einem ungewollten Aufblähen des Index.

Authentifizierung

SCRAM-SHA-256

In PostgreSQL 11 wurde die SCRAM-SHA-256-Passwortauthentifizierung unterstützt. Diese Methode verhindert das Ausspähen von Passwörtern bei nicht vertrauenswürdigen Verbindungen und ermöglicht es Ihnen, Ihre Passwörter in kryptografisch gehashter Form zu speichern.

Von allen derzeit unterstützten Passwort-Authentifizierungsmethoden ist dies die sicherste.

GSSAPI

GSSAPI ermöglicht eine sichere Authentifizierung sowie automatisches Single-Sign-On für Systeme, die dies unterstützen. Diese Authentifizierungsmethode basiert auf einer GSSAPI-kompatiblen Sicherheitsbibliothek. Die über die Datenbankverbindung gesendeten Daten werden unverschlüsselt, es sei denn, SSL wird verwendet; Die Authentifizierung selbst ist jedoch sicher. GSSAPI mit Kerberos-Authentifizierung ist mit PostgreSQL nach Industriestandard möglich. Bei der Verwendung von Kerberos wird ein Standardprinzipal im Format „Dienstname/Hostname@Realm“ verwendet. Alle Prinzipale, die in der vom Server verwendeten Schlüsseltabelle enthalten sind, werden vom PostgreSQL-Server akzeptiert.

LDAP

Diese Authentifizierungsmethode funktioniert ähnlich wie die Passwortauthentifizierung und verwendet LDAP als Überprüfungsmethode. Es wird nur zur Validierung von Benutzernamen- und Passwortpaaren verwendet, daher muss der Benutzer bereits in der Datenbank vorhanden sein, damit die Authentifizierung funktioniert. Die LDAP-Authentifizierung arbeitet entweder in einem einfachen Bindungsmodus oder in dem sogenannten Search+Bind-Modus. Search+bind ermöglicht Ihnen die Verwendung anderer Identifikatoren im Vergleich zum einfachen Bindungsmodus, der nur die Verwendung des Distinguished Name, des Domain-Namens oder der E-Mail-Adresse zulässt.

Zertifikat

Die Zertifikatauthentifizierungsmethode verwendet SSL-Zertifikate zur Authentifizierung. Folglich ist es nur für SSL-Verbindungen verfügbar. Bei der Zertifikatsauthentifizierung ist kein Kennwort erforderlich. Der Client muss lediglich ein gültiges und vertrauenswürdiges Zertifikat bereitstellen, um sich authentifizieren zu können. Der allgemeine Name des Zertifikats wird mit dem Datenbankbenutzernamen abgeglichen, und wenn eine Übereinstimmung gefunden wird, wird der Client angemeldet.

Weitere bemerkenswerte Eigenschaften

Paralleles Vakuum

Mit der Veröffentlichung von PostgreSQL 13 wurden Verbesserungen am VACUUM-Befehl implementiert. Die fragliche Verbesserung ist die hinzugefügte Parameteroption PARALLEL. Mit PARALLEL können Sie Index-Vakuum- und Index-Bereinigungsphasen von VACUUM durchführen. Auf diese Weise können Sie mehrere Indizes, die einer einzelnen Tabelle entsprechen, parallel leeren.

Parallele Abfrage

Die meisten Reports-Abfragen, die im Allgemeinen viele Daten scannen, leiden unter Leistungseinbußen, da selbst bei einem Index-Scan Daten aus vielen Zeilen gescannt oder aggregiert werden müssen. Diese Abfragen können bis 9.4 nur eine CPU verwenden und seriell ausgeführt werden.

Mit paralleler Abfrage (die parallele sequentielle Scans, Merge-Join, Hash-Join, Aggregation und andere parallele Abfrageplanfunktionen bietet) können diese Abfragen mehrere Worker nutzen und die Leistung kann Verbesserung von 2x auf 10x laut Dokumentation.

Sehen Sie sich diesen Beitrag an, um zu erfahren, wann Sie parallele Abfragen verwenden sollten.

Native logische Replikation

PostgreSQL führte die native logische Replikation in Version 10 ein, um im Gegensatz zur Streaming-Replikation und eher wie Oracle Streams eine flexiblere Replikationsoption bereitzustellen, um bestimmte Tabellen, Spalten oder Zeilen zu replizieren. Dies kann verwendet werden, um zwischen mehreren Datenbanken aufzuteilen oder aus mehreren Datenbanken zu konsolidieren. Und kann auch zwischen verschiedenen Hauptversionen von PostgreSQL replizieren.

Gespeicherte Prozeduren mit eingebetteten Transaktionen

Noch eine weitere Ergänzung, die PostgreSQL für Migrationen von Oracle-Datenbanken kompatibel macht.

Wir haben keine Transaktionskontrolle innerhalb des pgsql-Programms (DO-Block oder -Funktion) in Version 9.4 und müssen eine Problemumgehung wie dblink verwenden, um Transaktionen zu starten und festzuschreiben/zurückzusetzen .

Mit Stored Procedures, die erstmals in Version 11 stattfanden, können wir jetzt Transaktionskontrolle in jeder pgsql-Struktur wie While-Schleife, For-Schleife oder If-Else-Anweisung implementieren. Obwohl gespeicherte Prozeduren Funktionen ähneln, müssen sie mit dem CALL-Befehl aufgerufen werden und können als unabhängige Programme arbeiten.

Erzeugte Spalten

Wie die Oracle-Datenbank können generierte Spalten in PostgreSQL die Daten speichern, die automatisch aus anderen Spalten innerhalb der Zeile berechnet wurden. Dies beschleunigt Abfragen, da der Wert nicht während der Abfrageausführung berechnet werden muss und stattdessen der generierte Spaltenwert bei INSERT oder UPDATE in der Zeile berechnet wird.

JIT-Kompilierung

PostgreSQL 11, 12 und 13 unterstützen alle die Just-in-Time (JIT)-Kompilierung, die 2018 hinzugefügt wurde. Die JIT-Kompilierung ist der Prozess, bei dem eine interpretierte Programmauswertung in ein natives Programm. Mit der JIT-Kompilierung kann dieser Prozess zur Laufzeit durchgeführt werden. Ein Vorteil von JIT ist die Möglichkeit, ausdrucksspezifische Funktionen zu generieren, die die CPU nativ ausführen kann. Im Gegenzug gibt Ihnen der Prozess eine Beschleunigung.

Seitenprüfsummen

Seitenprüfsummen sind eine Funktion, mit der Sie die Integrität der auf der Festplatte gespeicherten Daten überprüfen können. Bisher konnten Sie Seitenprüfsummen nur während der Initialisierung eines PostgreSQL-Clusters aktivieren. PostgreSQL 12 hat die Möglichkeit eingeführt, Seitenprüfsummen in einem Offline-Cluster über den Befehl pg_checksums zu aktivieren oder zu deaktivieren.

Zusammenfassung

Wie Sie diesem Artikel entnehmen können, ist PostgreSQL ein sich ständig weiterentwickelndes Datenbanksystem, das viele leistungsstarke Funktionen mitbringt. Jede neue Version fügt neue aufregende Funktionen hinzu, die es zu einem echten Konkurrenten für andere Datenbanken wie Oracle machen. Seine Partitionierungs- und Indizierungsfunktionen erhalten viele neue Updates, die die bereits umfangreiche Toolbox erweitern.

Wenn Sie nach einer verwalteten Lösung für Ihre PostgreSQL-Datenbank suchen, können Sie sich gerne unseren Service ScaleGrid für PostgreSQL ansehen. Wir bieten eine kostenlose 30-Tage-Testversion, mit der Sie alle unsere Verwaltungsfunktionen ohne Einschränkungen nutzen können. Die Preise beginnen bei nur 10 $/Monat und geben Ihnen Zugriff auf eine vollständig verwaltete PostgreSQL-Hostinglösung der Enterprise-Klasse mit Support rund um die Uhr.