PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Относно pglogical производителност

Преди няколко дни пуснахме pglogical, решение за логическа репликация с напълно отворен код за PostgreSQL, което се надяваме да бъде включено в дървото на PostgreSQL в недалечно бъдеще. Няма да обсъждам всички неща, разрешени от логическата репликация – съобщението за pglogical версията представя доста добър преглед, а Саймън също накратко обясни предимствата на логическата репликация в друга публикация преди няколко дни.

Вместо това бих искал да говоря за един конкретен аспект, споменат в съобщението – сравнение на производителността със съществуващите решения. Страницата pglogical споменава

Сравнение

Тази публикация обяснява подробностите за сравнителните показатели, които извършихме, за да намерим максималната „устойчива“ пропускателна способност (транзакции в секунда), която всяко от решенията може да поеме без изоставане. За да направя това, проведох редица тестове на pgbench на чифт i2.4xlarge AWS инстанции с различен брой клиенти и измервах пропускателната способност на главния и колко време е отнело готовността, за да навакса (ако е изоставал) . След това резултатите бяха използвани за изчисляване на оценка на максималната пропускателна способност на възела в режим на готовност.

Например, да кажем, че работихме с pgbench с 16 клиента в продължение на 30 минути и сме измерили 10 000 tps на главния, но режимът на готовност изоставаше и отне още 15 минути, за да го навакса. Тогава оценката за максимална устойчива производителност е

tps =(изпълнени транзакции) / (общо време на изпълнение до достигане на режим на готовност)

т.е.

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

Така че в този случай максималната устойчива пропускателна способност в режим на готовност е 6,666 tps, т.е. само ~66% от скоростта на транзакциите, измерена на главния.

Система

Бенчмаркът беше извършен на чифт i2.4xlarge AWS инстанции, конфигурирани в една и съща група за разположение (така че с ~2Gbit мрежова връзка между тях) и 4x SSD дискове, конфигурирани в RAID-0 (така че I/O е малко вероятно да бъде проблем тук). Екземплярите имат ~122 GB RAM, така че наборът от данни (pgbench с мащаб 5000) се вписва в RAM. Всички тестове бяха извършени на PostgreSQL 9.5.0 с абсолютно същата конфигурация:

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

За всички системи за репликация беше използвана най-новата налична версия, особено

  • slony1 2.2.4
  • skytools 3.2

и беше настроена проста репликация, както е описано в уроците (и двете използват примера на pgbench, използван за еталон).

Резултати

Представените по-долу резултати включват също поточно репликация (асинхронен режим), за да ви дадат по-добра представа за режийните разходи, свързани с логическата репликация. Цените на транзакциите не са „суровите“ числа, измерени от pgbench, а „устойчивите“ проценти, изчислени по формулата, представена в началото на тази публикация.

клиенти поточно предаване pglogical слони 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Поправете „INSERT има повече изрази от целевите колони“ в PostgreSQL

  2. Предимствата на PostgreSQL

  3. Анотацията на Spring Boot Query с nativeQuery не работи в Postgresql

  4. Предайте множество стойности в един параметър

  5. Как да създадете PostgreSQL база данни