Ich habe einen Sun M4000 mit einem EMC CX4-120-Array mit einer schreibintensiven Datenbank verbunden. Schreibt einen Spitzenwert bei etwa 1200 E / A und 12 MB / s.
Laut EMC sättige ich den Schreibcache auf dem EMC-Array.
Ich denke, die einfachste Lösung besteht darin, die Redo-Protokolle auf eine DRAM-basierte SSD zu verschieben. Dadurch wird die Belastung des EMC-Arrays um die Hälfte reduziert, und für Apps werden keine Wartezeiten für den Protokollpuffer angezeigt. Ja, das DBWR kann zu einem Engpass werden, aber die Apps warten nicht darauf (wie bei Redo Commits!).
Ich gehe derzeit etwa 4 Redo-Protokolle mit 4 GB durch, sodass selbst etwa 20 GB SSD einen großen Unterschied machen würden. Da dies ein Kurzzeitspeicher ist und ständig überschrieben wird, sind Flash-basierte SSDs wahrscheinlich keine gute Idee.
Der M4000 hat keine zusätzlichen Laufwerkslose, daher wäre eine PCI-E-Karte perfekt. Ich könnte extern arbeiten oder Boot-Volumes in die EMV verschieben und die lokalen Laufwerke freigeben.
Sun verkauft eine Flash Accelerator F20 PCIe-Karte, aber das scheint ein Cache für einige SATA-Festplatten zu sein, keine DRAM-SSD-Lösung. Details sind lückenhaft, der M4000 wird nicht als unterstützt aufgeführt, und ich bin es leid, gegen Suns Telefonbaum zu kämpfen und nach menschlicher Hilfe zu suchen. :(
Stimmen andere zu, dass eine DRAM-SSD der richtige Weg ist? Hardware-Empfehlungen?
UPDATE Zusätzlich zu den Informationen in einem Kommentar unten habe ich verschiedene Einstellungen für "commit_write" ausprobiert und es hat keinen Unterschied gemacht.
Antworten:
Erstens: Ich denke, Sie haben nur sehr wenige Festplatten im Array. 1200IOPS können problemlos von 12 sich drehenden Festplatten unterstützt werden (100 IOPS pro Festplatte sind sehr sinnvoll). Wenn der Cache nicht damit umgehen kann, bedeutet dies, dass Ihre anhaltende Schreibrate von 1200 IOPS weitaus höher ist, als Ihre Festplatten unterstützen können.
Wie auch immer, SSD für Redo-Logs wird wahrscheinlich nicht helfen. Warten Sie in Ihrer Sitzung hauptsächlich auf die COMMIT-Anweisung? Überprüfen Sie die wichtigsten Warteereignisse in statspack / AWR, um dies zu überprüfen. Ich würde vermuten, dass ~ 95% Ihrer E / A überhaupt nicht in den Redo-Protokollen enthalten sind. Beispielsweise kann eine einzelne Zeileneinfügung in eine Tabelle mit 5 Indizes 1 E / A ausführen, um einen Tabellenblock (der Platz für die Zeile bietet) zu lesen, 5 Indexblöcke zu lesen (um sie zu aktualisieren), 1 Datenblock zu schreiben und 1 rückgängig zu machen Block und 5 Indexblöcke (oder mehr, wenn Nicht-Blattblöcke aktualisiert werden) und 1 Wiederholungsblock. Überprüfen Sie also statspack und sehen Sie Ihre Warteereignisse. Wahrscheinlich warten Sie viele READs und WRITEs auf Daten / Indizes. Das Warten auf Lesevorgänge verlangsamt das INSERT, und die WRITE-Aktivität macht READs noch langsamer - es sind dieselben Datenträger (Übrigens - benötigen Sie wirklich alle Indizes? Wenn Sie diejenigen löschen, die nicht vorhanden sein müssen, werden die Einfügungen beschleunigt).
Eine andere zu überprüfende Sache ist die RAID-Definition - ist es RAID1 (Spiegelung - jeder Schreibvorgang besteht aus zwei Schreibvorgängen) oder RAID 5 (jeder Schreibvorgang besteht aus 2 Lesevorgängen und zwei Schreibvorgängen für die Prüfsummenberechnung). RAID 5 ist beim schreibintensiven Laden viel langsamer.
Übrigens - Wenn die Festplatten die Schreiblast nicht bewältigen können, ist DBWR ein Engpass. Ihr SGA ist voll mit schmutzigen Blöcken, und Sie haben keinen Platz mehr zum Lesen neuer Blöcke (wie Indexblöcke, die verarbeitet / aktualisiert werden müssen), bis DBWR einige schmutzige Blöcke auf Datenträger schreiben kann. Überprüfen Sie erneut statspack / awr report / addm, um den Engpass zu diagnostizieren, der normalerweise auf den fünf häufigsten Warteereignissen basiert.
quelle
dd ist nichts im Vergleich zu Block I / O.
Schauen Sie sich für einige andere Ansichten um, anandtech.com hat einen exaustiven Test (gewährt mit MS SQL Server) mit SAS im Vergleich zu SSD in verschiedenen Kombinationen durchgeführt, und in der Solaris-Welt hat ZFS mit SSD verschiedene Teile (Protokolle, Cache usw.) ).
Aber ja, wenn RAID 5 und RAID 10 gleich sind (für Schreibvorgänge), machen Sie etwas falsch. Bei linearen Schreibvorgängen könnte RAID 5 schneller sein (dh es kann die Parität im Speicher ausführen und dann die Streifen und die Parität auf einmal schreiben), aber bei zufälligen kleinen Blöcken (4-8 KB) werden Sie durch Aktualisieren der Streifen (as) getötet von anderen bemerkt), sollte der Raid 10 mehr als 2x schneller sein, wenn nicht, stimmt etwas nicht.
Sie müssen tiefer graben, bevor Sie Geld für Hardware ausgeben.
quelle
Ich habe einen Beitrag über das Mounten von UFS-Partitionen mit der Option "forceirectio" und das Setzen des Oracle-Parameters "filesystemio_options" auf "setall" gesehen.
Ich habe es versucht und sehe eine 4-5-fache Verbesserung bei Oracle-Schreibvorgängen! Ja!
Die wichtigsten Symptome waren ein geringer Durchsatz, aber gute Reaktionszeiten auf der Festplatte. Dies scheint einigen Menschen zu helfen, anderen jedoch nicht. Es hat sicherlich den Job für mich gemacht.
Ich kann SSDs für neue Server in Betracht ziehen, aber dieser Server läuft jetzt einwandfrei.
Robert
quelle
Wenn diese Box nur eine x86 / 64-Box mit Linux gewesen wäre, hätte ich gerne eine der FusionIO PCIe-Laufwerkskarten empfohlen - sie sind erstaunlich schnell und sterben nicht mit schweren Schreibvorgängen wie SSDs. Leider werden sie weder mit Sparc noch mit Solaris unterstützt. Sie können sich jedoch an sie wenden, um dies zu besprechen.
quelle
Die F20e PCIe-Karte ähnelt in ihrer Funktion der Fusion I / O. Es ist im Grunde nur eine an eine PCIe angeschlossene Flash-SSD. Bei hoher Schreiblast müssen Sie sich sowohl um die Aufrechterhaltung ausreichender freier Blöcke (über eine Laufwerks-basierte Speicherbereinigung) kümmern, damit der Lösch- / Programmzyklus auf der SSD nicht zum Engpass wird die begrenzten Schreibzyklen, die auf einer Flash-basierten SSD verfügbar sind. Es ist definitiv schnell, aber möglicherweise nicht das beste Kit für diesen Job.
quelle