Oracle-Redo-Logs auf DRAM-SSD für eine umfangreiche Schreibdatenbank setzen?


9

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.


Archivieren Sie die Protokolle irgendwo? Wenn sie letztendlich von der SSD auf die Festplatte kopiert werden müssen, können Sie den Engpass einfach in die Archivierung verschieben.
Gary

Ja ... Redo-Protokolle werden archiviert und die E / A werden während des Redo-Log-Kopierens auf ca. 80 MB / s erhöht, da es sich um ein sequentielles Schreiben handelt. Ich dachte immer, Redo-Logs wären sequentiell, aber ich denke nicht.
rmeden

Antworten:


9

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.


1
+1 - und ich würde es +10 geben, wenn ich könnte.
Helvick

2
+1 für Ratschläge, um tatsächlich zu sehen, wo der Engpass liegt.
DCookie

Die Wartezeiten sind "Protokolldateisynchronisierung" und "Protokollpufferplatz". Mit DD kann ich ungefähr 150 MB / s auf das Volume bringen. Ich vermute, dass das LGWR auf den Abschluss einer E / A wartet, bevor die nächste gesendet wird. Die IO-Servicezeit beträgt ca. 1 ms. Die EMC verfügt über satte 500 MB Cache, der laut EMC nicht erhöht werden kann, ohne die gesamte Box zu aktualisieren. Wir haben 22 TB im Array, warum sie etwas mit so wenig Cache anbieten würden, ist mir ein Rätsel. Die Redo - Logs sind derzeit in einem 5-weiten RAID 5, aber es gab keinen Unterschied mit RAID 10 (ein weiterer Grund zu vermuten Cache)
rmeden

Übrigens, wenn mehr Cache vorhanden ist, kann die Festplatte möglicherweise immer noch nicht mithalten. Durch Verschieben des REDO vom EMV-Array wird die Kapazität für die Datenplatten freigegeben und die E / A halbiert. Eine kleine DRAM-SSD ist möglicherweise die billigste Hochleistungsfestplatte, da sie klein sein kann.
Rmeden

meden - wie viel Redo schreibt Oracle pro Sekunde? Sie sagten, die Gesamt-E / A beträgt 12 MB / s und 1200 IOPS. Dies bedeutet viele kleine E / A (durchschnittlich 10 KB). Wenn Sie die Redo-Protokolle auf SSD verschieben, werden nur verschiedene Warteereignisse angezeigt, da der DBWR zum Engpass wird und INSERT auf freien Puffer in der SGA wartet. Bitte überprüfen Sie, welche Art von RAID Sie haben, wie groß die Stripe ist und wie groß die Oracle-Blockgröße ist (sind Ihre Datendateien auch über alle Festplatten verteilt?). Überprüfen Sie auch in statspack die Quelle für die meisten E / A - ist es Redo oder eine andere Sache - überprüfen Sie E / A pro Tablespace
Ofir Manor

2

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.


2

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


Höchstwahrscheinlich wurde die von Ihnen erlebte Beschleunigung nicht durch die Aktivierung der direkten E / A verursacht, sondern durch die Aktivierung der asynchronen E / A. In Oracle bedeutet setall direkt + asynchron.
Kubanczyk

1

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.


1

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.


tks John. Ich hätte nicht gedacht, dass es bei mir funktionieren würde. Sun unterstützt es auf einem M4000 sowieso nicht einmal. :(
rmeden
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.