tak jak obiecałem – zrobiłem mocniejsze testy.
najpierw tylko takie info – jak pamiętacie poprzednio robiłem pgbencha -s 750. i na ustawieniach praktycznie “defaultowych" robił maksymalnie 830 tps. po dokonfigurowaniu robił (przy 100 połączeniach jednocześnie, czyli wtedy gdy poprzedni config robił 780-790) w zależności od nie wiem czego od 960 do 1070 tps'ów. całkiem ładnie.
potem zrobiłem bazę ze skalą pgbencha 7500. wielkość bazy – 120 giga, czas robienia pgbench -i – 150 minut.
ponieważ każdy test (każde concurrency) robię na czystej bazie, stwierdziłem, że robienie za każdym razem inicjalizacji po 150 minut odpada.
skopiowałem więc cały katalog $PGDATA na bok, i robiłem testy kopiując co test czysty katalog na miejsce “zużytego".
skrypt testujący:
#!/bin/bash -x<br /> export TOTAL_TRANS=1000000<br /> for C in 1 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200<br /> do<br /> rm logs/* -f<br /> pg_ctl -w -l logs/x.log start<br /> TRANS=$[ $TOTAL_TRANS / $C ]<br /> pgbench -s 750 -c $C -t $TRANS -U pgdba -d bench 2> /dev/null > /home/pgdba/bench-$C.std<br /> pg_ctl -m immediate stop<br /> killall -9 postgres<br /> killall -9 postmaster<br /> killall -9 postgres<br /> killall -9 postmaster<br /> rm -rf /mnt/postgres/pgdba/data<br /> cp -a /mnt/postgres/pgdba/data.back /mnt/postgres/pgdba/data<br /> done
proste i miłe 🙂
wyniki wyglądają tak:
jest lepiej niż poprzednio – nie ma takiego spadku wydajności.
co interesujące – są skoki o amplitudzie około 50tps, ale wydaje mi się, że mogą one być spowodowane aktywnością poza-bazodanową (cron).
całość osięgnęła stabilną średnią około 640 tps. dla przypomnienia – przy wielkości bazy 4 razy większej niż ram. całkiem przyjemny wynik.