sql >> Database >  >> RDS >> PostgreSQL

Op pglogische prestaties

Een paar dagen geleden hebben we pglogical uitgebracht, een volledig open-source logische replicatie-oplossing voor PostgreSQL, die hopelijk in een niet al te verre toekomst zal worden opgenomen in de PostgreSQL-structuur. Ik ga het niet hebben over alle dingen die mogelijk worden gemaakt door logische replicatie - de aankondiging van de pglogical-release geeft een redelijk goed overzicht, en Simon legde ook kort de voordelen van logische replicatie uit in een ander bericht een paar dagen geleden.

In plaats daarvan wil ik het hebben over een bepaald aspect dat in de aankondiging wordt genoemd:prestatievergelijking met bestaande oplossingen. De pglogische pagina vermeldt

Benchmark

In dit bericht worden de details uitgelegd voor de benchmarks die we hebben uitgevoerd om de maximale "duurzame" doorvoer (transacties per seconde) te vinden die elk van de oplossingen aankan zonder vertraging op te lopen. Om dat te doen heb ik een aantal pgbench-tests uitgevoerd op een paar i2.4xlarge AWS-instanties met een variërend aantal clients, en de doorvoer op de master gemeten en hoe lang het duurde voordat de stand-by was ingehaald (als deze achterbleef) . De resultaten werden vervolgens gebruikt om een ​​schatting te maken van de maximale doorvoer op het standby-knooppunt.

Laten we bijvoorbeeld zeggen dat we pgbench 30 minuten met 16 clients hebben uitgevoerd en dat we 10000 tps op de master hebben gemeten, maar de stand-by bleef achter en duurde nog eens 15 minuten om in te halen. Dan is de maximale schatting van de duurzame doorvoer

tps =(transacties uitgevoerd) / (totale looptijd tot stand-by ingehaald)

d.w.z.

tps =(30 60 10.000) / (45 * 60) =18.000.000 / 2.700 =6.666

Dus in dat geval is de maximale duurzame doorvoer op de standby 6,666 tps, d.w.z. slechts ~66% van de transactiesnelheid gemeten op de master.

Systeem

De benchmark is uitgevoerd op een paar i2.4xlarge AWS-instanties, geconfigureerd in dezelfde plaatsingsgroep (dus met ~2Gbit netwerkverbinding ertussen), en 4x SSD-schijven geconfigureerd in RAID-0 (dus I/O is waarschijnlijk geen probleem hier). De instances hebben ~122GB RAM, dus de dataset (pgbench met schaal 5000) past in RAM. Alle tests zijn uitgevoerd op PostgreSQL 9.5.0 met exact dezelfde configuratie:

checkpoint_timeout = 15min
effective_io_concurrency = 32
maintenance_work_mem = 1GB
max_wal_size = 8GB
min_wal_size = 2GB
shared_buffers = 16GB

Voor alle replicatiesystemen werd de meest recent beschikbare versie gebruikt, met name

  • slony1 2.2.4
  • skytools 3.2

en er is een eenvoudige replicatie opgezet zoals beschreven in de tutorials (beide gebruiken het pgbench-voorbeeld dat voor de benchmark wordt gebruikt).

Resultaten

De resultaten die hierna worden gepresenteerd, omvatten ook streamingreplicatie (asynchrone modus) om u een beter idee te geven van de overhead die gepaard gaat met logische replicatie. De transactietarieven zijn niet de "ruwe" cijfers zoals gemeten door pgbench, maar de "duurzame" tarieven berekend met behulp van de formule aan het begin van dit bericht.

klanten streaming pglogisch slony londiste
1 1075 1052 949 861
2 2118 2048 1806 1657
4 3894 3820 3456 1643
8 6506 6442 2040 1645
16 9570 8251 1535 1635
24 11388 7728 1548 1622
32 12384 7818 1358 1623

  1. Correcte manier om Bi-directioneel 1:m in Green-DAO . te hanteren

  2. De tupelstructuur van een record declareren in PL/pgSQL

  3. Wat is het equivalent van de Oracle Dual-tabel in MS SqlServer?

  4. Rijen zoeken die geen numerieke gegevens bevatten in Oracle