Geavanceerd PostgreSQL: indexering, partitionering en replicatie · Les

Replicatieslots en WAL-beheer

Begrijp replicatieslots voor gegarandeerde WAL-bewaring en geavanceerde technieken voor het beheren van WAL-bestanden.

Les 3 van 411 stappen

Replicatieslots en WAL-beheer is een gratis Geavanceerd PostgreSQL: indexering, partitionering en replicatie-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Geavanceerd PostgreSQL: indexering, partitionering en replicatie. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Geavanceerd PostgreSQL: indexering, partitionering en replicatie bevat in totaal 4 lessen.

WAL: het hart van PostgreSQL

De Write-Ahead Log (WAL) vormt de kern van de betrouwbaarheid en replicatie van PostgreSQL. Je kunt WAL zien als een journaal waarin elke wijziging aan je database wordt vastgelegd.

  • Elke transactie schrijft naar WAL voordat de gegevens naar schijf worden vastgelegd.
  • Zo blijft de integriteit van de gegevens behouden, zelfs als de server crasht.
  • Standbyservers gebruiken WAL om wijzigingen van de primaire server opnieuw op te bouwen en gesynchroniseerd te blijven.

De uitdaging van WAL-bewaring

Standaard maakt PostgreSQL oude WAL-bestanden vrij om schijfruimte te besparen. Dat is prima voor een zelfstandige server, maar vormt een uitdaging voor replicatie.

Als een standbyserver te ver achterraakt, zijn de benodigde WAL-bestanden mogelijk al van de primaire server verwijderd. Dit leidt tot:

  • replicatiefout: de standbyserver kan niet meer bijbenen;
  • handmatige tussenkomst: een volledige hersynchronisatie van de standbyserver is nodig.

Replicatieslots introduceren

Replicatieslots zijn de oplossing van PostgreSQL voor het probleem met WAL-bewaring. Een replicatieslot is een persistent object op de primaire server dat voorkomt dat WAL-segmenten die door een standbyserver of logische decoder nodig zijn, automatisch worden verwijderd.

  • Ze garanderen dat WAL-bestanden worden bewaard totdat ze zijn verwerkt.
  • Ze houden de voortgang van elke verbonden verbruiker bij.
  • Slots zorgen ervoor dat een standbyserver altijd kan bijbenen, zelfs na een lange verbroken verbinding.

Zo zorgen slots voor veilige WAL-bewaring

Wanneer een replicatieslot actief is, verwijdert de primaire server geen WAL-bestanden die de consument van het slot (bijvoorbeeld een stand-byserver of een proces voor logische decodering) nog niet als verwerkt heeft bevestigd.

Hierdoor ontstaat een 'bladwijzer' in de WAL-stroom. De primaire server verwijdert WAL-segmenten pas zodra alle actieve slots voorbij dat punt zijn gevorderd.

Een fysiek slot maken

Fysieke replicatieslots worden gebruikt met fysieke streamingreplicatie. Ze houden de LSN (Log Sequence Number) van de stand-by bij en zorgen ervoor dat alle benodigde WAL-bestanden voor die stand-by behouden blijven.

Gebruik de functie pg_create_physical_replication_slot() om een fysiek slot te maken. Vervang my_physical_slot door een beschrijvende naam.

SELECT pg_create_physical_replication_slot('my_physical_slot');

Een logisch slot maken

Logische replicatieslots worden gebruikt voor logische replicatie (het pub/sub-model van PostgreSQL) of andere toepassingen voor logische decodering. Ze decoderen WAL naar een stroom van logische wijzigingen (bijvoorbeeld INSERT, UPDATE, DELETE).

Je geeft een plug-in op (zoals pgoutput voor ingebouwde logische replicatie) om te bepalen hoe WAL-records worden omgezet. Vervang my_logical_slot door de gewenste naam.

SELECT pg_create_logical_replication_slot('my_logical_slot', 'pgoutput');

Replicatieslots bewaken

Het is essentieel om je replicatieslots te bewaken, zodat je zeker weet dat ze actief zijn en niet buitensporig veel WAL-bestanden vasthouden. De weergave pg_replication_slots biedt gedetailleerde informatie:

  • slot_name: De naam van het slot.
  • active: True als er momenteel een consument is verbonden.
  • restart_lsn: De oudste WAL-LSN die het slot nog nodig heeft.
  • confirmed_flush_lsn: Voor logische slots: de LSN die door de consument is bevestigd.

Voer deze query uit om bestaande slots te bekijken:

SELECT
  slot_name,
  slot_type,
  active,
  restart_lsn,
  pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS wal_lag
FROM pg_replication_slots;

Een replicatieslot verwijderen

Wanneer een stand-byserver of logische consument niet meer nodig is, is het belangrijk om het bijbehorende replicatieslot te verwijderen. Een ongebruikt slot blijft onbeperkt WAL-bestanden verzamelen, waardoor de schijfruimte van je primaire server mogelijk vol raakt!

Gebruik de functie pg_drop_replication_slot() en geef de naam van het slot op. Wees voorzichtig: als je een actief slot verwijdert, wordt de verbinding met de consument verbroken.

SELECT pg_drop_replication_slot('my_physical_slot');

Schijfruimte en inactieve slots beheren

Replicatieslots zijn krachtig, maar brengen ook een verantwoordelijkheid met zich mee: schijfruimte beheren. Inactieve slots veroorzaken vaak dat de schijfruimte op primaire servers uitgeput raakt.

  • Controleer pg_replication_slots regelmatig op inactieve slots.
  • Als een stand-by permanent offline is, verwijder je het slot onmiddellijk.
  • Bewaar de wal_lag (zoals weergegeven in de controlequery) om trage consumenten te ontdekken.

Proactief beheer voorkomt storingen!

Kennistoets over slotbeheer

Je hebt een primaire server en een stand-by die vorige week buiten gebruik is gesteld. Het replicatieslot voor deze stand-by, met de naam old_standby_slot, is niet verwijderd. Wat is het waarschijnlijkste gevolg voor je primaire server?

Samenvatting: replicatieslots

In deze les hebben we kennisgemaakt met de replicatieslots van PostgreSQL, een belangrijke functie voor robuuste replicatie en logische decodering.

  • Slots garanderen het behouden van WAL voor verbonden consumenten.
  • Er zijn twee typen: fysiek voor streamingreplicatie en logisch voor logische decodering.
  • Je kunt slots maken, bewaken (met pg_replication_slots) en, heel belangrijk, verwijderen.
  • Beheer je slots altijd zorgvuldig om problemen met schijfruimte door inactieve slots te voorkomen!
Gratis beginnen

Leer Geavanceerd PostgreSQL: indexering, partitionering en replicatie met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
11
Lessen
44

Veelgestelde vragen

Is de les “Replicatieslots en WAL-beheer” gratis?

Ja — de volledige tekst van “Replicatieslots en WAL-beheer” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Geavanceerd PostgreSQL: indexering, partitionering en replicatie wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Geavanceerd PostgreSQL: indexering, partitionering en replicatie bevat in totaal 4 lessen.

Wat leer ik in “Replicatieslots en WAL-beheer”?

Begrijp replicatieslots voor gegarandeerde WAL-bewaring en geavanceerde technieken voor het beheren van WAL-bestanden. Je oefent met Geavanceerd PostgreSQL: indexering, partitionering en replicatie door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Geavanceerd PostgreSQL: indexering, partitionering en replicatie te beginnen?

Ervaring vooraf is niet nodig. Geavanceerd PostgreSQL: indexering, partitionering en replicatie op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Replicatieslots en WAL-beheer”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Geavanceerd PostgreSQL: indexering, partitionering en replicatie?

Ja. Elke les over Geavanceerd PostgreSQL: indexering, partitionering en replicatie bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Cascaderende replicatie
  2. Multi-masterreplicatie (BDR)
  3. Replicatieslots en WAL-beheer
  4. Logische decoding en change data capture
← Terug naar Geavanceerd PostgreSQL: indexering, partitionering en replicatie