Begrijpen en Verminderen van PostgreSQL Replicatievertraging

Replicatietraagte in PostgreSQL treedt op wanneer wijzigingen die op de primaire server zijn aangebracht, tijd nodig hebben om op de replica-server te worden weerspiegeld. Of je nu streaming- of logische replicatie gebruikt, traagheid kan de prestaties, consistentie en beschikbaarheid van het systeem beïnvloeden. Deze blog behandelt de soorten replicatie, hun verschillen, oorzaken van traagheid, wiskundige formules voor het schatten van traagheid, monitoringtechnieken en strategieën om replicatietraagte te minimaliseren.

Soorten replicatie in PostgreSQL

Streaming replicatie

Streaming replicatie verzendt continu Write-Ahead Log (WAL) wijzigingen van de primaire naar een of meer replica-servers in bijna realtime. De replica past de wijzigingen sequentieel toe zodra ze zijn ontvangen. Deze methode replicates de gehele database en zorgt ervoor dat de replica’s gesynchroniseerd blijven.

Voordelen

  • Lage latentie met bijna realtime synchronisatie.
  • Efficiënt voor volledige database-replicatie.

Nadelen

  • Replica’s zijn alleen-lezen, dus alle schrijfbewerkingen moeten naar de primaire node gaan.
  • Als de netwerkverbinding verbroken wordt, kan de traagheid aanzienlijk toenemen.

Logische replicatie

Logische replicatie verplaatst gegevensniveau wijzigingen in plaats van laag-niveau WAL-gegevens. Het maakt selectieve replicatie mogelijk, waarbij alleen specifieke tabellen of delen van een database worden gerepliceerd. Logische replicatie maakt gebruik van een logisch decoderingsproces om WAL-wijzigingen om te zetten in SQL-achtige wijzigingen.

Voordelen

  • Maakt selectieve replicatie van specifieke tabellen of schema’s mogelijk.
  • Ondersteunt beschrijfbare replica’s met conflictresolutieopties.

Nadelen

  • Hogere latentie als gevolg van logische decoderingsoverhead.
  • Het is minder efficiënt dan streaming replicatie voor grote datasets.

Hoe Replicatievertraging Optreedt

Replicatievertraging treedt op wanneer de snelheid waarmee wijzigingen worden gegenereerd op de primaire server de snelheid overschrijdt waarmee ze kunnen worden verwerkt en toegepast op de replica-server. Dit onevenwicht kan optreden door verschillende onderliggende factoren, die allemaal bijdragen aan vertragingen in gegevenssynchronisatie. De meest voorkomende oorzaken van replicatievertraging zijn:

Netwerklatentie

Netwerklatentie verwijst naar de tijd die gegevens nodig hebben om van de primaire server naar de replica-server te reizen. WAL (Write-Ahead Log) segmenten worden continu via het netwerk verzonden tijdens streaming replicatie. Zelfs kleine vertragingen in netwerktransmissie kunnen zich opstapelen, waardoor de replica vertraagd raakt.

Oorzaken

  • Hoge netwerk round-trip tijden (RTT).
  • Meer bandbreedte om grote volumes WAL-gegevens te verwerken.
  • Netwerkcongestie of pakketverlies.

Als de primaire server aanzienlijke veranderingen genereert tijdens piekverkeer, kan een traag of overbelast netwerk een bottleneck veroorzaken, waardoor de replica geen WAL-wijzigingen ontvangt.

Oplossing

Gebruik netwerkverbindingen met lage latentie en hoge bandbreedte en schakel WAL-compressie in (wal_compression = on) om de gegevensgrootte tijdens verzending te verkleinen.

I/O-bottlenecks

I/O-bottlenecks treden op wanneer de schijf van een replica-server te traag is om inkomende WAL-wijzigingen te schrijven. Streaming-replicatie is afhankelijk van het wegschrijven van wijzigingen naar schijf voordat ze worden toegepast, dus eventuele vertragingen in het I/O-subsysteem kunnen leiden tot opbouw van vertraging.

Oorzaken

  • Trage of overbelaste harde schijven (HDD’s).
  • Onvoldoende doorvoer voor schrijven naar schijf.
  • Schijfverstoring door andere processen.
  • Als de replica-server gebruikmaakt van draaiende schijven (HDD) in plaats van solid-state drives (SSD), kunnen WAL-wijzigingen mogelijk niet snel genoeg worden geschreven om gelijke tred te houden met gegevenswijzigingen, waardoor de replica achterloopt op de primaire server.

Oplossing

Om de disk-I/O van een replica te optimaliseren, gebruik SSD’s voor snellere schrijfsnelheden en isoleer replicatieprocessen van andere disk-intensieve taken.

CPU/geheugenbeperkingen

Replicatieprocessen vereisen CPU en geheugen om wijzigingen te decoderen, te schrijven en toe te passen. Als een replica-server niet over voldoende verwerkingskracht of geheugen beschikt, kan deze moeite hebben om de binnenkomende wijzigingen bij te houden, wat resulteert in replicatievertraging.

Oorzaken

  • Beperkte CPU-kernen of trage processors.
  • Onvoldoende geheugen voor WAL-buffers.
  • Andere processen verbruiken CPU- of geheugencapaciteit.
  • Als de replica grote transacties verwerkt of queries uitvoert naast replicatie, kan de CPU verzadigd raken, waardoor het replicatieproces vertraagt.

Oplossing

Wijs meer CPU-kernen en geheugen toe aan de replica-server. Verhoog de grootte van de wal_buffers om de efficiëntie van de WAL-verwerking te verbeteren.

Zware Werkbelastingen op de Primaire Server

Replicatievertraging kan ook optreden wanneer de primaire server te veel wijzigingen te snel genereert voor de replica om te verwerken. Grote transacties, bulk-invoegen of frequente updates kunnen de replicatie overweldigen.

Oorzaken

  • Bulkgegevensimporten of grote transacties.
  • Hoge frequentie updates naar grote tabellen.
  • Hoge gelijktijdige werkbelastingen op de primaire.
  • De transactiebelasting kan te zwaar zijn als de primaire server meerdere grote transacties gelijktijdig verwerkt, zoals tijdens een bulkgegevensimport. Het volume aan WAL-gegevens kan het verwerkingsvermogen van de replica in real-time overschrijden, wat de vertraging verhoogt.

Oplossing

Optimaliseer transacties door meer kleinere updates te bundelen en lange transacties te vermijden. Als strikte synchronisatie niet cruciaal is, gebruik dan asynchrone replicatie om de replicatielast te verminderen.

Hulpbronnenconcurrentie

Hulpbronnenconcurrentie doet zich voor wanneer meerdere processen strijden om dezelfde hulpbronnen, zoals CPU, geheugen of schijf I/O. Dit kan zowel op de primaire als op de replica-server gebeuren en leiden tot vertragingen in de replicatieverwerking.

Oorzaken

  • Andere processen verbruiken schijf I/O, CPU of geheugen.
  • Achtergrondtaken zoals back-ups of analyses die gelijktijdig draaien.
  • Netwerkconcurrentie tussen replicatietraffic en andere datatransfers.
  • Als de replica-server ook back-ups of analytische query’s uitvoert, kan de concurrentie om CPU- en schijfbronnen het replicatieproces vertragen.

Oplossing

Isoleren van replicatiewerkzaamheden van andere hulpbronnenintensievere processen. Plan back-ups en analyses tijdens daluren om interferentie met replicatie te voorkomen.

Wiskundige formule voor replicatietraagheid

Gebruik de volgende formule om de replicatietraagheid te berekenen:

In logische replicatie wordt extra tijd verbruikt door logische decodering:

Monitoring van replicatietraagheid

Streaming replicatie monitoring

De weergave pg_stat_replication kan worden gebruikt om de vertraging bij streaming replicatie te monitoren. Het biedt inzicht in de status en vertraging tussen de primaire en replica servers.

SQL

 

  • sent_lsn: Laatste WAL-locatie verzonden naar de replica.
  • write_lsn: Laatste WAL-locatie geschreven op de replica.
  • lag_bytes: Het verschil tussen de twee geeft de vertraging aan.

Monitoring van Logische Replicatie

Logische replicatie vertraging kan worden gemonitord met behulp van de weergave pg_stat_subscription.

SQL

 

Voorbeeld: Visualisatie van Replicatievertraging

De volgende Python-codefragment visualiseert de vertraging bij streaming en logische replicatie in de loop van de tijd.

Python

 

De resulterende grafiek vergelijkt de prestaties van streaming en logische replicatie. Logische replicatie heeft doorgaans een meer variabele vertraging als gevolg van decodering en verwerkingsoverhead.

Hoe Replicatievertraging Te Verminderen

1. Optimaliseer WAL-configuratie

  • Verhoog wal_buffers om meer WAL-gegevens in het geheugen vast te houden.
  • Stel wal_writer_delay in op een lagere waarde (bijv. 10 ms) om WAL-gegevens sneller te schrijven.
Shell

 

2. Verbeter netwerkprestaties

  • Gebruik netwerkverbindingen met lage latentie en hoge bandbreedte tussen primaire en replica’s.
  • Comprimeer WAL-gegevens tijdens de overdracht om de overdrachttijd te verkorten: wal_compression = on.

3. Gebruik asynchrone replicatie (indien mogelijk)

  • Asynchrone replicatie vermindert vertraging door niet te wachten op bevestiging van wijzigingen door de replica, maar brengt wel een risico op gegevensverlies met zich mee.

PLSQL

 

4. Schakel Parallelle Toepassing in bij Logische Replicatie

PLSQL

 

5. Wijs meer middelen toe aan replica’s

  • Zorg ervoor dat de replica voldoende CPU en geheugen heeft om WAL-wijzigingen snel te verwerken.
  • Gebruik SSD’s voor snellere schijf I/O op de replica.

6. Batchtransacties

  • Groep meerdere kleine updates in minder transacties om overhead te minimaliseren.

Echte Voorbeelden

Verminderen van Streaming Replicatie Vertraging

Een bedrijf dat een hoogverkeers PostgreSQL-cluster runt, ondervond replicatie vertraging tijdens piekuren. Ze halveerden de replicatie vertraging door wal_buffers te verhogen naar 64MB en wal_writer_delay te verlagen naar 10ms. Overstappen op een hogesnelheidsnetwerkverbinding verminderde de vertraging tot minder dan een seconde.

Verminderen van Logische Replicatie Vertraging

Een systeem met meerdere logische abonnementen ondervond vertraging tijdens hoge schrijfbelasting. Het inschakelen van parallelle toepassing in PostgreSQL 14 verdeelde de werklast over talrijke werkers, waardoor de replicatie vertraging van 4 seconden naar minder dan 1 seconde werd verminderd.

Conclusie

Replicatie vertraging is een kritisch probleem dat de prestaties en consistentie van PostgreSQL-systemen beïnvloedt. Streaming replicatie biedt lage latentie maar vereist dat de gehele database wordt gerepliceerd, terwijl logische replicatie flexibiliteit biedt maar met hogere overhead. Regelmatige monitoring met behulp van pg_stat_replication en pg_stat_subscription stelt beheerders in staat om vertraging te detecteren en te verminderen.

Het optimaliseren van WAL-configuraties, het verbeteren van netwerkprestaties, het gebruik van parallelle toepassingen en het toewijzen van voldoende middelen kan aanzienlijk bijdragen aan het verminderen van vertraging. Door het juist afstemmen wordt ervoor gezorgd dat replica’s gesynchroniseerd blijven en het systeem een hoge beschikbaarheid en prestaties behoudt.

Source:
https://dzone.com/articles/understanding-and-reducing-postgresql-replication-lag