Postgres-Schreibleistung auf Intel S3700 SSD

7

Ich sehe keine Leistungssteigerungen bei Postgres beim Schreiben. Ich dachte, ich würde dies mit einer einzelnen SSD im Vergleich zu einem Hardware-RAID-10-Array mit (16) SAS-Laufwerken mit 15.000 U / min tun.

Ich habe einen Dell R820 mit einer PERC H700-Hardware-RAID-Karte und 16 SAS-Laufwerken mit 15.000 U / min in einem RAID 10-Array sowie eine 800 s Intel s3700 SSD. Der Server verfügt über 128 GB RAM und 64 Kerne Xeon E5-4640 mit 2,40 GHz, auf denen CentOS 6.4 und Postgres 9.2.4 ausgeführt werden.

Ich verwende pgbench, um die SAS-Laufwerke in einem RAID 10-Array mit der einzelnen SSD zu vergleichen.

SAS RAID 10-Ergebnisse mit 15.000 U / min

pgbench -U postgres -p 5432 -T 50 -c 10 pgbench
Startvakuum ... Ende.
Transaktionstyp: TPC-B (Art von)
Skalierungsfaktor: 1
Abfragemodus: einfach
Anzahl der Kunden: 10
Anzahl der Threads: 1
Dauer: 50 s
Anzahl der tatsächlich verarbeiteten Transaktionen: 90992
tps = 1819.625430 (einschließlich Verbindungsaufbau)
tps = 1821.417384 (ohne Verbindungsaufbau)

Einzelne Intel s3700 SSD Ergebnisse

pgbench -U postgres -p 5444 -T 50 -c 10 pgbench
Startvakuum ... Ende.
Transaktionstyp: TPC-B (Art von)
Skalierungsfaktor: 1
Abfragemodus: einfach
Anzahl der Kunden: 10
Anzahl der Threads: 1
Dauer: 50 s
Anzahl der tatsächlich verarbeiteten Transaktionen: 140597
tps = 2811.687286 (einschließlich Verbindungsaufbau)
tps = 2814.578386 (ohne Verbindungsaufbau)

In der Praxis haben wir einen sehr schreibintensiven Prozess, der ungefähr 7 Minuten dauert, und das RAID 10-Array und die SSD befinden sich innerhalb von 10 oder 15 Sekunden voneinander.

Ich habe von der SSD eine weitaus bessere Leistung erwartet.

Hier sind Bonnie ++ Ergebnisse für die SSD:

Version 1.96 ------ Sequenzielle Ausgabe ------ - Sequenzielle Eingabe- - Zufällige-
Parallelität 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Maschinengröße K / s% CP K / s% CP K / s% CP K / s% CP K / s% CP / s% CP
openlink2.rady 252G 532 99 375323 97 183855 45 1938 99 478149 54 +++++ +++
Latenz 33382us 82425us 168ms 12966us 10879us 10208us
Version 1.96 ------ Sequentielles Erstellen ------ -------- Zufälliges Erstellen --------
openlink2.radyn.com -Create-- --Read --- -Delete-- -Create-- --Read --- -Delete--
              Dateien / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP
                 16 5541 46 +++++ +++ +++++ +++ 18407 99 +++++ +++ +++++ +++
Latenz 1271us 1055us 1157us 456us 20us 408us

Hier sind die Bonnie ++ - Ergebnisse für die RAID 10-Laufwerke mit 15.000 U / min:

Version 1.96 ------ Sequenzielle Ausgabe ------ - Sequenzielle Eingabe- - Zufällige-
Parallelität 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Maschinengröße K / s% CP K / s% CP K / s% CP K / s% CP K / s% CP / s% CP
openlink2.rady 252G 460 99 455060 98 309526 56 2156 94 667844 70 197.9 85
Latenz 37811us 62175us 393ms 75392us 169ms 17633us
Version 1.96 ------ Sequentielles Erstellen ------ -------- Zufälliges Erstellen --------
openlink2.radyn.com -Create-- --Read --- -Delete-- -Create-- --Read --- -Delete--
              Dateien / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP
                 16 12045 95 +++++ +++ +++++ +++ 16851 98 +++++ +++ +++++ +++
Latenz 7879us 504us 555us 449us 24us 377us

Hier sind dd Ergebnisse für die SSD:

dd if = / dev / zero von = / path / on / ssd bs = 1M count = 4096 conv = fdatasync, notrunc
4294967296 Bytes (4,3 GB) kopiert, 12,7438 s, 337 MB / s

Und hier sind die dd-Ergebnisse für die RAID 10-Laufwerke mit 15.000 U / min:

dd if = / dev / zero von = / path / on / array bs = 1M count = 4096 conv = fdatasync, notrunc
4294967296 Bytes (4,3 GB) kopiert, 8,45972 s, 508 MB / s

Ich würde die Postgres-Konfiguration veröffentlichen, aber es ist klar, dass die SSD das RAID 10-Array nicht übertrifft, sodass sie nicht anwendbar zu sein scheint.

Funktioniert die SSD also so, wie sie sein sollte?

Oder ist das RAID 10 mit 16 schnellen Laufwerken so gut, dass es eine einzelne SSD übertrifft? Ein RAID 10-Array der SSDs wäre fantastisch, aber bei jeweils 2.000 US-Dollar ist der Preis von 8.000 US-Dollar schwer zu rechtfertigen (es sei denn, wir waren sicher, dass wir die erhofften 2- bis 5-fachen Zuwächse bei den Leistungssteigerungen in der realen Welt sehen würden).

==========================================

Es stellt sich heraus, dass wir 16 SAS-Laufwerke im Array haben, nicht 8. Ich denke, der kombinierte Durchsatz ist

Hier sind die Benchmarks der Iozone, die mehr Licht ins Dunkel bringen. Das RAID10-Array liefert ziemlich konsistent bessere Ergebnisse. 4 oder 8 der SSDs in RAID 10 würden wahrscheinlich das SAS-Array schlagen (natürlich zu einem hohen Preis).

SSD-Benchmark http://pastebin.com/vEMHCQhR

RAID-10-Benchmark mit 16 Laufwerken http://pastebin.com/LQNrm7tT

Hier ist die Postgres-Konfiguration für die SSD, falls jemand Verbesserungspotenzial sieht, um die SSD http://pastebin.com/Qsb3Ks7Y zu nutzen

user1517922
quelle
3
Testen Sie einen 64-Core-Computer mit mindestens 64 gleichzeitigen Clients (hinter einem Verbindungspool), um Abstiegsergebnisse zu erhalten. Ein Postgres-Prozess kann nur auf einem Kern ausgeführt werden.
Frank Heikens
3
Sie sollten auch Test mit pg_test_fsync, und anstatt dd, Verwendung sysbench‚s Disk - I / O - Tests.
Craig Ringer
Sie können auch kurzes Streicheln ausprobieren. Dies hilft Ihnen bei Ihrer IOPS-Leistung.
Borys

Antworten:

10

Ich bin mir nicht sicher, ob dies an sich schon ein Problem ist, da, wie Sie sehen können, ein einzelnes SSD-Laufwerk in vielen Tests ein RAID 10-Setup mit 8 Festplatten übertreffen kann.

Fast alle Tests deuten auf eine bessere Geschwindigkeit des einzelnen SSD-Laufwerks hin:

  • bessere Latenzen
  • geringere CPU-Auslastung (wenn ich in einigen Fällen richtig lese, sind es 44% gegenüber 95%)
  • Die Anzahl der Transaktionen pro Sekunde ist mit 55% höher
  • Insgesamt ist keine Transaktion mit den gleichen 55% größer

In einem einzigen Fall wurde diese SSD übertroffen, und das waren sequentielle Schreibvorgänge. Was, würde ich sagen, am häufigsten für Stapel ist, nicht für einen OLTP-Ladestil. Wenn Sie also hauptsächlich solche Schreibvorgänge ausführen, ist eine einzelne SSD derzeit möglicherweise keine Lösung für Sie.

Und wir sprechen nicht über Fusion-IO- Laufwerke (von denen ich vermute, dass sie Ihnen das nächste Level bringen, das Sie erwarten, aber zu einem Preis der nächsten Level).

Aus der Sicht des DBA, der im Laufe der Jahre mit beschissenem Speicher arbeiten musste, ist dies ein fairer technologischer Fortschritt und sie scheinen richtig zu funktionieren, aber vielleicht habe ich meine Erwartungen zu niedrig gesetzt.

Ich würde mehr Verbesserungen von Ihrer SSD erwarten, wenn Sie den Benchmark mit mehr Threads und höherer Parallelität testen, da hier die SSDs glänzen. Wenn Sie also Ihre Tests mit viel mehr Clients und mehr Threads wiederholen könnten , wäre ich neugierig auf dieses Vergleichsergebnis.

Marian
quelle
Die Leistung der SSD ist bewundernswert, wenn man bedenkt, dass sie gegen die kombinierte Bandbreite von 16 SAS-Laufwerken antritt (ich habe ursprünglich fälschlicherweise 8 gesagt). Die Benchmarks der Iozone, die insbesondere in einem Excel-Diagramm angezeigt werden, zeigen, dass eine einzelne SSD in den meisten Fällen nicht mithalten kann, manchmal sogar erheblich. Denken Sie, dass 4 oder 8 SSDs in RAID10 für sequentielle Schreibvorgänge schneller sind als die 16 SAS-Laufwerke in RAID10?
user1517922
6

Ein paar Möglichkeiten:

  • Ihr Computer verfügt über viel RAM. Es ist möglich, dass dies einen großen Teil der E / A-Anforderungen aus dem Cache erfüllt, wodurch Leistungsunterschiede mehr oder weniger ausgeglichen werden.
  • Wenn Ihre E / A-Arbeitslast hauptsächlich sequentiell ist, bietet ein HDD-Array mit einer großen Streifengröße einen guten sequentiellen Durchsatz. Mit einem 256k-Streifen können Sie 600 MB / s von einem Array von 10 15k-Laufwerken erhalten, was schneller ist als die angegebene Schreibleistung eines einzelnen S3700.
ConcernedOfTunbridgeWells
quelle
Wir haben viel RAM, und Postgres ist so eingerichtet, dass etwa 32 GB davon verwendet werden (ausreichend für unsere gesamte 8-GB-Datenbank und alle Indizes im RAM), sodass die Leseleistung im Wesentlichen gleich ist. Ich denke, es wird mindestens ein 4 SSD RAID10 Array oder PCIe Flash benötigen, um die Schreibleistung zu übertreffen, die wir jetzt haben.
user1517922
4

Anstatt alle Eier in einen Korb zu werfen (alle SSDs oder alle Festplatten), sollten Sie ein Hybrid-Festplattenlayout in Betracht ziehen. Was meine ich ?

  • Festplatten eignen sich hervorragend zum Schreiben, insbesondere wenn das Schreib-Caching aktiviert ist
  • SSDs eignen sich sehr gut für Lesevorgänge, sind für zufällige Schreibvorgänge in Ordnung, bei sequentiellen Schreibvorgängen jedoch eher träge
  • Es ist offensichtlich, dass Zeit für das Schreiben in die Transaktionsprotokolle im pg_xlogOrdner aufgewendet werden muss . Transaktionsprotokolle werden immer nacheinander geschrieben.

VORSCHLAG

Vielleicht sollten Sie pg_xlogauf den RAID10-SAS-Laufwerken mounten. Dies kann dazu beitragen, die Anzahl der tatsächlich benötigten SAS-Laufwerke zu verringern. Alles andere kann auf SSD bleiben. Dieser Weg:

  • Ihre Daten können schnell gelesen werden
  • Das Schreiben in Transaktionsprotokolle kann auf separaten, jedoch schnelleren Festplatten erfolgen.

Versuche es !!!

UPDATE 27.06.2013 07:38 EDT

Hier ist eine Tabelle aller Ordner in postgresql :

Item         Description
PG_VERSION   A file containing the major version number of PostgreSQL
base         Subdirectory containing per-database subdirectories
global       Subdirectory containing cluster-wide tables, such as pg_database
pg_clog      Subdirectory containing transaction commit status data
pg_multixact Subdirectory containing multitransaction status data(used for shared row locks)
pg_notify    Subdirectory containing LISTEN/NOTIFY status data
pg_stat_tmp  Subdirectory containing temporary files for the statistics subsystem
pg_subtrans  Subdirectory containing subtransaction status data
pg_tblspc    Subdirectory containing symbolic links to tablespaces
pg_twophase  Subdirectory containing state files for prepared transactions
pg_xlog      Subdirectory containing WAL (Write Ahead Log) files

pg_xlogVersuchen Sie, andere Teile der ACID-Konformität auch auf SAS zu verschieben, da sich die Umstellung auf SAS um 10% verbessert hat. Vielleicht bewegt pg_twophase, pg_multixact, pg_clogkann auch helfen.

RolandoMySQLDBA
quelle
4
Vielen Dank. Durch das Verschieben von pg_xlog auf RAID10 wurde die Leistung im SSD Postgres-Cluster um etwa 10% erhöht.
user1517922