Langsames Fsync mit lokaler SSD von Google Cloud (Postgresql)

Langsames Fsync mit lokaler SSD von Google Cloud (Postgresql)

Bei der Verwendung einfacher „pgbench“-Tests von GCE erhalte ich bei der Option „Lokale SSD“ (im Vergleich zu SSD Persistent Disk) unerwartet wenige Transaktionen pro Sekunde:

# With Local SSD
# /dev/mapper/vg0-data on /data type xfs (rw,noexec,noatime,attr2,inode64,noquota)
pg-dev-002:~$ pgbench -c 8 -j 2 -T 60 -U postgres
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 8
number of threads: 2
duration: 60 s
number of transactions actually processed: 10765
tps = 179.287875 (including connections establishing)
tps = 179.322407 (excluding connections establishing)

# With SSD Persistent Disk
# /dev/mapper/vg1-data on /data1 type xfs (rw,noexec,noatime,attr2,inode64,noquota)
pg-dev-002:/data$ pgbench -c 8 -j 2 -T 60 -U postgres
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 8
number of threads: 2
duration: 60 s
number of transactions actually processed: 62457
tps = 1040.806664 (including connections establishing)
tps = 1041.012782 (excluding connections establishing)

Die Benchmarks von „fio“ zeigen die angegebenen IOPS und den Durchsatz für lokale SSDs. Die Ausführung von „pg_test_fsync“ auf einer lokalen SSD lässt mich jedoch annehmen, dass die Latenz von fsync der Übeltäter ist. Die Zahlen für lokale SSDs stammen aus der Anwendung des IRQ-Skripts von Google.Hier:

# Local SSD
open_datasync                     319.738 ops/sec    3128 usecs/op
fdatasync                         321.963 ops/sec    3106 usecs/op

# Persistent SSD
open_datasync                    1570.305 ops/sec     637 usecs/op
fdatasync                        1561.469 ops/sec     640 usecs/op
  • Getestet mit Ubuntu 14.04 und Debian 7-Images
  • Instanztyp: n1-highmem-4
  • Die Einbindungsoptionen sind für beide Datenträgertypen identisch.

Ich habe nichts zu den Einschränkungen von fsync und der lokalen SSD gesehen, bin mir aber nicht sicher, wo ich sonst nachsehen oder testen kann.

Antwort1

Vergleichen eineseinzelEine lokale SSD/HDD/usw. mit einem RAID-Controller vom Typ SAN zu vergleichen, ist wie einen VW Käfer mit einem Audi RS10 Le Mans zu vergleichen. Ja, sie kommen beide aus derselben Fabrik und beide verwenden Viertaktmotoren/SSDs/HDDs, aber ihre Abstimmungen usw. sind völlig unterschiedlich.

Ich kann Ihnen mehrere Beispiele für gewonnene Erfahrungen nennen, aber die einfachen Antworten beziehen sich auf die enormen Mengen an batteriegestütztem RAM-Cache, die der SAN-basierte Speicher im Vergleich zu dem nicht vorhandenen auf der lokalen SSD/HDD hat. Selbst SSDs können nicht ganz mit batteriegestütztem DDR3-RAM konkurrieren, wenn es darum geht, zu bestätigen, dass Daten auf die Festplatte „übertragen“ wurden. Darüber hinaus kann die einzelne lokale Festplatte (realistischerweise) nur eine einzige Operation gleichzeitig verarbeiten, bei der ein Block auf die „Festplatte“ geschrieben wird, während die batteriegestützten SAN-Systeme mehrere Anfragen gleichzeitig verarbeiten können, die „auf die Festplatte schreiben“ (da sie die Daten in den batteriegestützten DDR3-RAM übertragen).

Schließlich könnte die Frage seinwelchelokale SSD-Festplatte verwendet wird, da ich große Unterschiede in der Schreibleistung zwischen verschiedenenGrößenderselben SSD-Familie (je größer, desto schneller), ganz zu schweigen von den unterschiedlichen Geschwindigkeiten der verschiedenen SSD-Festplattenhersteller auf dem Markt.

Ja, SSDs sind schneller als HDDs, aber noch nicht so schnell wie batteriegestützter DDR3-RAM ;)

Antwort2

Google erkennt an, dass Schreibcache-Flushs auf lokalen SSDs ziemlich langsam sind, und bietet Schritte zum Deaktivieren des Schreibcaches auf dem Dateisystem-Mount, um diese Verzögerung zu vermeiden [falls dies für Ihren Anwendungsfall geeignet ist]. Die Dokumente sindHier.

verwandte Informationen