Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Was ist VACUUM in PostgreSQL?

InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In PostgreSQL gibt es einen Mechanismus MVCC (darüber werde ich weiter unten ausführlicher sprechen) - die Mehrversionenfähigkeit von Zeilen. Wenn Sie Daten aktualisieren oder löschen, verschwinden die alten Versionen der Zeilen nicht sofort. Sie bleiben in den Tabellen-Dateien als "tote Last". Mit der Zeit werden es immer mehr solcher Zeilen, die Tabellen blähen sich auf, die Indizes verlieren an Effizienz und die Abfragen beginnen langsamer zu werden.
Um die Datenbank in einem gesunden Zustand zu halten, verwendet PostgreSQL den Prozess VACUUM. Dieser entfernt ungenutzte Versionen von Zeilen, gibt Platz frei und hilft, die Statistiken für den Abfrageplaner zu aktualisieren. Es ist eine Art Reinigung, die man fast nie manuell starten muss, da normalerweise der automatische autovacuum läuft.
Es gibt auch VACUUM FULL - eine radikalere Version. Diese reinigt nicht nur den "Müll", sondern baut die Tabelle auch physisch neu auf und gibt den Platz an das Dateisystem zurück. Der Preis dafür ist eine vollständige Sperrung der Tabelle während der Operation. Daher wird FULL selten verwendet und hauptsächlich in nächtlichen Zeitfenstern oder nach massiven Löschungen.
Ohne VACUUM degradiert PostgreSQL allmählich: die Tabellen wachsen, die Indizes verlieren an Genauigkeit, die Abfragen werden langsam, und autovacuum kann zu aggressiv arbeiten. Daher ist VACUUM nicht nur ein technisches Werkzeug, sondern ein grundlegender Mechanismus, der es PostgreSQL ermöglicht, über viele Jahre hinweg die Leistung aufrechtzuerhalten.

MVCC (Multi-Version Concurrency Control) 

MVCC (Multi-Version Concurrency Control) ist eine Methode, mit der PostgreSQL und andere DBMS es vielen Clients ermöglichen, gleichzeitig Daten zu lesen und zu ändern, ohne blockierende Sperren, die die Arbeit lähmen.
In herkömmlichen Datenbanken ohne MVCC können gleichzeitige Schreib- und Lesevorgänge Konflikte erzeugen. MVCC löst dies so: Wenn Sie eine Zeile aktualisieren, schreibt die Datenbank sie nicht über die alte, sondern erstellt eine neue Version. Die alte bleibt für die Transaktionen verfügbar, die sie noch "sehen". Jede Transaktion arbeitet mit ihrem eigenen Snapshot der Daten, ohne anderen in die Quere zu kommen.
Der Vorteil ist einfach - Leser blockieren nicht das Schreiben, und das Schreiben blockiert nicht die Leser. Deshalb kann PostgreSQL eine große Anzahl paralleler Operationen ohne nennenswerte Verzögerungen verarbeiten.
Der Nachteil ist ebenfalls offensichtlich - alte Versionen sammeln sich an. Und genau dafür ist VACUUM verantwortlich, um diese "toten" Zeilen zu entfernen und die Datenbank in einem sauberen Zustand zu halten.

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

Variablen in Ruby: @, @@ und Klasseninstanzvariablen
30. Okt, 20:54 Uhr

Variablen in Ruby: @, @@ und Klasseninstanzvariablen

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Der Unterschied zwischen blank?, present?, empty? und nil? in Ruby
30. Okt, 21:06 Uhr

Der Unterschied zwischen blank?, present?, empty? und nil? in Ruby

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist Middleware in Ruby on Rails und wann wird sie verwendet?
04. Nov, 10:39 Uhr

Was ist Middleware in Ruby on Rails und wann wird sie verwendet?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist der Vanilla Rails-Ansatz?
14. Nov, 16:48 Uhr

Was ist der Vanilla Rails-Ansatz?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist Elasticsearch und wie funktioniert es?
22. Nov, 12:35 Uhr

Was ist Elasticsearch und wie funktioniert es?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist eine Zeitreihen-Datenbank?
22. Nov, 12:42 Uhr

Was ist eine Zeitreihen-Datenbank?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist ein B-Baum (ausgeglichener Baum)?
22. Nov, 12:58 Uhr

Was ist ein B-Baum (ausgeglichener Baum)?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Fix des Problems bei der Installation von Ruby 3.4.3 (und nicht nur) über RVM auf macOS (Apple Silicon)
30. Dez, 14:05 Uhr

Fix des Problems bei der Installation von Ruby 3.4.3 (und nicht nur) über RVM auf macOS (Apple Silicon)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Thundering Herd Problem: was ist das und warum bricht es die Produktion
15. Jan, 10:14 Uhr

Thundering Herd Problem: was ist das und warum bricht es die Produktion

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist Exponential Backoff und Random Jitter?
15. Jan, 15:24 Uhr

Was ist Exponential Backoff und Random Jitter?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Anbindung des Elasticsearch-Dienstes an die Rails-Anwendung (Coolify in der Cloud, Server bei Hetzner).
15. Feb, 13:45 Uhr

Anbindung des Elasticsearch-Dienstes an die Rails-Anwendung (Coolify in der Cloud, Server bei Hetzner).

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
„Kein Speicherplatz mehr auf dem Gerät“ - wenn Docker die ganze Festplatte aufgefressen hat
15. Feb, 19:57 Uhr

„Kein Speicherplatz mehr auf dem Gerät“ - wenn Docker die ganze Festplatte aufgefressen hat

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska