Podivný výkon PostgreSQL v závislosti na FS

Při pokusu o změření výkonu PostgreSQL na různých konfiguracích raidu jsem nečekaně narazil na podivné chování PGSQL na různých FS.

Testovací sestava

  • Server raid.iprint.sk
  • Testovací disky sda: Seagate ST3320620AS, sdd: SAMSUNG HD103SJ
  • OS CentOS 5.4 64b, kernel 2.6.18-164.6.1
  • SW PostgreSQL 8.1.18, e2fsprogs 1.39, xfsprogs 2.9.4
  • Nastavení PostgreSQL serveru jsem záměrně ponechal z balíčku.

Měření

Měření probíhalo programem pgbench. Výsledky (pro pgbench -c 1 -t 10000), počet transakcí za sekundu:

sda[ext3]: 334
sdd[ext3]: 602
sdd[xfs]:   35

Rozdíly mezi disky sda a sdd odpovídají rozdílu v HW. Ovšem na stejném disku je ext3 17x výkonnější než na xfs!

Lidé postgresql na xfs normálně používají a na fórech se hádají o jednotky procent výkonu, nikoliv o řád. Co se týče souborů, na daném serveru je xfs +/- stejně rychlý jako ext3

Vysvětlení + opravené měření

Na vině pomalé PGSQL DB bylo nastavení XFS, konkrétně barriér. Nové měření se vypnutými bariérami, počet transakcí za sekundu v testu pgbench:

disk [xfs nobarrier]: 943
disk [xfs barrier]: 34
raid-5 [xfs nobarrier]: 67

Na softwarovém raidu v linuxu a na lvm nelze bariéry zapnout (pozn redakce: v jádře 2.6.34 a novějších to už jde). Na samostatném disku je xfs při vypnutých bariérách řádově stejně rychlý jako ext3, při zapnutých rychlost db rapidně klesá. Jedná se o interakci mezi DB, žurnálováním systému souborů a zápisovými bariérami.

Příspěvek byl publikován v rubrice CentOS, Linux, LVM, PostgreSQL, RAID, Systémy souborů. Můžete si uložit jeho odkaz mezi své oblíbené záložky.