Protokolle und Datenlaufwerke weisen unterschiedliche Datenzugriffsmuster auf, die sich (zumindest theoretisch) widersprechen, wenn sie ein Laufwerk gemeinsam nutzen.
Protokoll schreibt
Der Protokollzugriff besteht aus einer sehr großen Anzahl kleiner sequentieller Schreibvorgänge. Etwas vereinfacht ausgedrückt, sind DB-Protokolle Ringpuffer, die eine Liste von Anweisungen zum Auslesen von Datenelementen an bestimmte Speicherorte auf der Festplatte enthalten. Das Zugriffsmuster besteht aus einer großen Anzahl kleiner sequenzieller Schreibvorgänge, deren Ausführung garantiert werden muss, damit sie auf die Festplatte geschrieben werden.
Im Idealfall sollten sich die Protokolle auf einem leisen RAID-1- oder RAID-10-Volume befinden (dh nicht mit anderen geteilt werden). Logischerweise können Sie den Prozess als das Haupt-DBMS anzeigen, das Protokolleinträge und einen oder mehrere Protokollleser-Threads ausschreibt, die die Protokolle verbrauchen und die Änderungen auf die Datenfestplatten ausschreiben (in der Praxis wird der Prozess so optimiert, dass die Datenschreibvorgänge geschrieben werden wenn möglich sofort raus). Wenn auf den Protokolldatenträgern anderer Datenverkehr vorhanden ist, werden die Köpfe durch diese anderen Zugriffe verschoben, und die sequentiellen Protokollschreibvorgänge werden zu zufälligen Protokollschreibvorgängen. Diese sind viel langsamer, sodass ausgelastete Protokolldatenträger einen Hotspot erzeugen können, der als Engpass für das gesamte System fungiert.
Daten schreiben
(aktualisiert) Protokollschreibvorgänge müssen auf der Festplatte (als stabile Medien bezeichnet) festgeschrieben werden, damit eine Transaktion gültig und festschreibungsfähig ist. Man kann dies logisch als geschriebene Protokolleinträge anzeigen und dann als Anweisungen verwenden, um Datenseiten durch einen asynchronen Prozess auf die Festplatte zu schreiben. In der Praxis werden die Schreibvorgänge für die Datenträgerseite zum Zeitpunkt des Protokolleintrags tatsächlich vorbereitet und gepuffert, sie müssen jedoch nicht sofort geschrieben werden, damit die Transaktion festgeschrieben wird. Die Datenträger - Puffer werden durch die Lazy Writer - Prozess (für diesen Hinweis Dank Paul Randal) mit stabilem Medium (Festplatte) geschrieben , die In dieser Technet - Artikel bespricht in etwas mehr Detail.
Dies ist ein stark zufälliges Zugriffsmuster. Wenn Sie also dieselben physischen Datenträger mit Protokollen teilen, kann dies zu einem künstlichen Engpass bei der Systemleistung führen. Die Protokolleinträge müssen geschrieben werden, damit die Transaktion festgeschrieben werden kann. Wenn also zufällige Suchvorgänge diesen Prozess verlangsamen (zufällige E / A sind viel langsamer als sequentielle Protokoll-E / A), wird das Protokoll von einer Sequenz in ein Gerät mit wahlfreiem Zugriff umgewandelt. Dies führt zu einem ernsthaften Leistungsengpass auf einem ausgelasteten System und sollte vermieden werden. Gleiches gilt für die gemeinsame Nutzung temporärer Bereiche mit Protokolldatenträgern.
Die Rolle des Cachings
SAN-Controller haben in der Regel große RAM-Caches, die den Datenverkehr mit wahlfreiem Zugriff bis zu einem gewissen Grad absorbieren können. Aus Gründen der Transaktionsintegrität ist es jedoch wünschenswert, dass Festplattenschreibvorgänge von einem DBMS garantiert abgeschlossen werden. Wenn ein Controller so eingestellt ist, dass er Write-Back-Caching verwendet, werden die fehlerhaften Blöcke zwischengespeichert und der E / A-Aufruf wird als abgeschlossen an den Host gemeldet.
Dies kann eine Menge von Konfliktproblemen ausgleichen, da der Cache eine Menge von E / A-Vorgängen absorbieren kann, die andernfalls auf die physische Festplatte gelangen würden. Es kann auch die Paritätslese- und Schreibvorgänge für RAID-5 optimieren, wodurch die Auswirkungen auf die Leistung von RAID-5-Volumes verringert werden.
Dies sind die Merkmale, die die Denkschule "Lassen Sie das SAN damit umgehen" antreiben, obwohl diese Ansicht einige Einschränkungen aufweist:
Das Write-Back-Caching weist immer noch Fehlermodi auf, bei denen Daten verloren gehen können, und der Controller hat eine Verbindung zum DBMS hergestellt. Dabei wird darauf hingewiesen, dass Blöcke auf die Festplatte geschrieben wurden, auf denen sie tatsächlich nicht vorhanden sind. Aus diesem Grund möchten Sie das Write-Back-Caching möglicherweise nicht für eine Transaktionsanwendung verwenden. Dies gilt insbesondere für geschäftskritische Daten oder Finanzdaten, bei denen Datenintegritätsprobleme schwerwiegende Folgen für das Unternehmen haben können.
Insbesondere SQL Server verwendet E / A in einem Modus, in dem ein Flag (FUA oder Forced Update Access) physische Schreibvorgänge auf den Datenträger erzwingt, bevor der Aufruf zurückgegeben wird. Microsoft verfügt über ein Zertifizierungsprogramm, und viele SAN-Anbieter stellen Hardware her, die diese Semantik berücksichtigt ( hier zusammengefasste Anforderungen ). In diesem Fall optimiert keine Cache-Größe die Schreibvorgänge auf der Festplatte. Dies bedeutet, dass der Protokolldatenverkehr überlastet wird, wenn er sich auf einem ausgelasteten freigegebenen Volume befindet.
Wenn die Anwendung viel Festplattenverkehr generiert, wird der Cache möglicherweise von ihrer Arbeitsgruppe überlastet, was auch zu Problemen mit Schreibkonflikten führt.
Wenn das SAN mit anderen Anwendungen gemeinsam genutzt wird (insbesondere auf demselben Datenträger), kann der Datenverkehr von anderen Anwendungen zu Protokollengpässen führen.
Einige Anwendungen (z. B. Data Warehouses) erzeugen große vorübergehende Lastspitzen, die sie in SANs ziemlich unsozial machen.
Selbst in einem großen SAN werden separate Protokollvolumes empfohlen. Möglicherweise müssen Sie sich bei einer wenig genutzten Anwendung nicht um das Layout kümmern. Bei sehr großen Anwendungen können Sie sogar von mehreren SAN-Controllern profitieren. Oracle veröffentlicht eine Reihe von Fallstudien zum Data Warehouse-Layout, in denen einige der größeren Konfigurationen mehrere Controller umfassen.
Verantwortung für Leistung dort einsetzen, wo sie hingehört
Machen Sie das SAN-Team für die Leistung der Anwendung verantwortlich, wenn große Volumes vorhanden sind oder wenn die Leistung ein Problem darstellen könnte. Wenn sie Ihre Konfigurationsempfehlungen ignorieren, stellen Sie sicher, dass sich das Management dessen bewusst ist und die Verantwortung für die Systemleistung an der richtigen Stelle liegt. Legen Sie insbesondere akzeptable Richtlinien für wichtige DB-Leistungsstatistiken fest, z. B. E / A-Wartezeiten oder Page Latch-Wartezeiten oder akzeptable E / A-SLAs für Anwendungen.
Beachten Sie, dass die Aufteilung der Verantwortung für die Leistung auf mehrere Teams einen Anreiz darstellt, mit den Fingern zu zeigen und das Geld an das andere Team weiterzugeben. Dies ist ein bekanntes Anti-Muster für das Management und eine Formel für Probleme, die sich über Monate oder Jahre hinziehen, ohne jemals gelöst zu werden. Idealerweise sollte ein einzelner Architekt die Berechtigung haben, Änderungen an der Anwendung, der Datenbank und der SAN-Konfiguration anzugeben.
Testen Sie das System auch unter Last. Wenn Sie es arrangieren können, können gebrauchte Server und Direct-Attach-Arrays recht günstig bei Ebay gekauft werden. Wenn Sie eine solche Box mit einem oder zwei Festplatten-Arrays einrichten, können Sie die Konfiguration der physischen Festplatte anpassen und die Auswirkungen auf die Leistung messen.
Als Beispiel habe ich einen Vergleich zwischen einer Anwendung, die in einem großen SAN (einem IBM Shark) ausgeführt wird, und einer Box mit zwei Sockets und einem direkt angeschlossenen U320-Array durchgeführt. In diesem Fall übertraf die von ebay gekaufte Hardware im Wert von 3.000 GBP ein 1-Millionen-Pfund-High-End-SAN um den Faktor zwei - auf einem Host mit ungefähr gleichwertiger CPU- und Speicherkonfiguration.
Aufgrund dieses besonderen Vorfalls könnte argumentiert werden, dass das Herumliegen einer solchen Situation eine sehr gute Möglichkeit ist, SAN-Administratoren aufrichtig zu halten.