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.