PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

O wydajności pglogicznej

Kilka dni temu wypuściliśmy pglogical, w pełni otwarte rozwiązanie do replikacji logicznej dla PostgreSQL, które, miejmy nadzieję, zostanie włączone do drzewa PostgreSQL w niedalekiej przyszłości. Nie będę omawiał wszystkich rzeczy, które umożliwia replikacja logiczna – ogłoszenie o wydaniu pglogical przedstawia całkiem dobry przegląd, a Simon również pokrótce wyjaśnił zalety replikacji logicznej w innym poście kilka dni temu.

Zamiast tego chciałbym omówić jeden konkretny aspekt wspomniany w ogłoszeniu – porównanie wydajności z istniejącymi rozwiązaniami. Strona pglogiczna wspomina

Wzorzec

W tym poście wyjaśniono szczegóły testów porównawczych, które przeprowadziliśmy, aby znaleźć maksymalną „zrównoważoną” przepustowość (transakcje na sekundę), którą każde z rozwiązań może obsłużyć bez opóźnień. W tym celu przeprowadziłem szereg testów pgbench na parze instancji i2.4xlarge AWS z różną liczbą klientów i mierzyłem przepustowość na masterze oraz czas oczekiwania na nadrobienie zaległości (jeśli był opóźniony) . Wyniki zostały następnie wykorzystane do obliczenia szacunkowej maksymalnej przepustowości w węźle gotowości.

Załóżmy na przykład, że przez 30 minut korzystaliśmy z pgbencha z 16 klientami i zmierzyliśmy 10000 tps na masterze, ale stan gotowości był opóźniony i nadrobienie zajęło nam kolejne 15 minut. Wtedy maksymalna trwała szacunkowa przepustowość wynosi

tps =(wykonane transakcje) / (całkowity czas działania do czasu oczekiwania)

tj.

tps =(30 60 10 000) / (45 * 60) =18 000 000 / 2,700 =6,666

W takim przypadku maksymalna możliwa do utrzymania przepustowość w trybie gotowości wynosi 6,666 t/s, czyli tylko ~66% szybkości transakcji mierzonej na urządzeniu głównym.

System

Test porównawczy został przeprowadzony na parze instancji i2.4xlarge AWS, skonfigurowanych w tej samej grupie rozmieszczenia (a więc z połączeniem sieciowym ~2Gbit między nimi) i 4x dyskami SSD skonfigurowanymi w RAID-0 (więc jest mało prawdopodobne, że I/O będzie problem tutaj). Instancje mają ~122 GB pamięci RAM, więc zestaw danych (pgbench ze skalą 5000) mieści się w pamięci RAM. Wszystkie testy zostały przeprowadzone na PostgreSQL 9.5.0 z dokładnie taką samą konfiguracją:

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

W przypadku wszystkich systemów replikacji została użyta najnowsza dostępna wersja, w szczególności

  • slony1 2.2.4
  • Skytools 3.2

i skonfigurowano prostą replikację, jak opisano w samouczkach (oba używają przykładu pgbench użytego do testu porównawczego).

Wyniki

Wyniki przedstawione dalej obejmują również replikację strumieniową (tryb asynchroniczny), aby dać lepsze pojęcie o narzutach związanych z replikacją logiczną. Stawki transakcyjne nie są „surowymi” liczbami mierzonymi przez pgbench, ale „zrównoważonymi” stawkami obliczonymi przy użyciu wzoru przedstawionego na początku tego postu.

klienci przesyłanie strumieniowe pglogiczne slony londysta
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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksportowanie bazy danych PostgreSQL za pomocą phpPgAdmin

  2. Zmartwiony transakcją

  3. Importowanie pliku .sql w systemie Windows do postgresql

  4. java.lang.ClassNotFoundException:org.postgresql.Driver

  5. W Postgresql wymusza unikalność kombinacji dwóch kolumn