Ich habe einen ziemlich ausgelasteten Datenbankserver, auf dem SQL Server 2008 R2 ausgeführt wird und der das folgende Setup aufweist:
- SATA RAID 1 (2 Laufwerke) - Betriebssysteme / Programme
- SAS RAID 10 (4 Laufwerke) - SQL-Datenbankdateien (Daten und Protokolle)
- SAS RAID 1 (2 Laufwerke) - TempDB (Daten und Protokolle)
Angenommen, ich kann diesem Server keine zusätzlichen Laufwerke hinzufügen. Habe ich die verfügbare Konfiguration optimal genutzt? Oder sollte ich hier ein anderes Schema in Betracht ziehen, bei dem Protokolle beispielsweise von den Datendateien isoliert sind?
Aktualisieren:
Für diejenigen, die weitere Hardwaredetails angefordert haben:
- Die SATA-Laufwerke (für die OS / Program-Partition verwendet) sind: WD 7200 RPM 3 Gb / s 3,5-Zoll-SATA
- Die in den anderen Arrays verwendeten SAS-Laufwerke sind: Seagate 15K RPM 6 Gb / s 3,5 Zoll SAS
- Der verwendete RAID-Controller ist ein: LSI 9260-8i SAS / SATA 6 Gb 8-Port
Update 2:
Ausgehend von den Rückmeldungen, die ich erhalten habe, habe ich anscheinend die folgenden Optionen zur Auswahl: - Ich werde die Prämie an jemanden vergeben, der mir sagen kann, welcher der wahrscheinlich besten in der von mir skizzierten Umgebung ist:
- Lass alles so wie es ist - ich werde es wahrscheinlich nicht viel besser machen
- Verschieben Sie meine 2 SAS RAID 1-Laufwerke in mein vorhandenes RAID 10-Array, damit es aus insgesamt 6 Festplatten besteht
- Verschieben Sie meine Protokolldateien auf das SAS-RAID 1 und / oder verschieben Sie TempDB (Daten oder Protokolle) zurück auf das RAID 10
sql-server
hardware
DanP
quelle
quelle
Antworten:
Varianten dieser Frage tauchen regelmäßig auf:
Es gibt auch gelegentliche Brötchenstreitigkeiten über die "Best Practice" der Daten- / Protokolltrennung.
Ohne detailliertere Analyse dessen, was dieser Server tut, gelten dieselben Ratschläge wie zuvor.
Es gibt selten einen Punkt in einem Split mit so wenigen verfügbaren Spindeln. Ein einzelnes Array mit einer größeren IOP-Kapazität nimmt in der Regel die Unebenheiten Ihrer Arbeitslast besser auf als zwei kleinere Arrays.
Eine Variante, die einen Test wert sein kann, ist das Versetzen von tempdb auf das Betriebssystemlaufwerk. Tun Sie dies nur, wenn Sie eine repräsentative Arbeitslast haben, die Sie wiederholt abspielen können, um einen fairen Vergleich der Konfiguration zu gewährleisten. Wenn Sie sich für diese Anordnung in der Produktion entscheiden, stellen Sie sicher, dass das Tempdb-Wachstum begrenzt ist, damit Sie nicht versehentlich den gesamten freien Speicherplatz auf dem Betriebssystemlaufwerk belegen.
Angesichts der Tatsache, dass es sich bei Ihren OS-Laufwerken um Untersetzer mit 7200 U / min handelt, wäre ich überrascht, wenn die Tempdb in der OS-Laufwerkskonfiguration irgendeinen Vorteil hätte.
quelle
Es hängt alles von Ihrer Arbeitsbelastung ab, aber mit nur 6 Laufwerken sind Ihre Optionen begrenzt. Wenn Ihre Arbeitslast nicht stark von Tempdb abhängt, z. B. bei Sortierungen, Hash-Tabellen und der Snapshot-Isolierung, ist es möglicherweise besser, die 6 SAS-Laufwerke in RAID 10 zusammen zu verwenden. Wenn Sie dies jedoch wissen oder über die entsprechenden Messdaten verfügen Tempdb ist stark ausgelastet, dann sollten Sie es getrennt halten, wie Sie haben.
quelle
Es hängt sehr stark davon ab, was Sie unter "sehr beschäftigt" verstehen: Unterschiedliche Workload-Muster (Schreiben überlastet oder nicht, häufige oder nicht häufige Massenoperationen, gleichzeitiger Zugriff, um nur drei der vielen Variablen zu nennen) können drastische Auswirkungen auf die Arbeitslast haben Leistung einer gegebenen Spindelanordnung.
Bei einer schreibintensiven Situation kann das Trennen der Protokolle von den Daten einen signifikanten Unterschied bewirken, da bei jedem Schreibvorgang sowohl das Protokoll als auch die Datendateien aktualisiert werden. Dies bedeutet eine erhebliche Menge an zusätzlichem Kopfwechsel, wenn sich beide Dateisätze auf demselben Spindelsatz befinden .
Ohne weiteren Bezug auf Ihre Arbeitslast (und die Spezifikation dieser Laufwerke und aller Controller, die sich zwischen ihnen und der Maschine befinden) würde ich mich für drei Volumes entscheiden: eines für OS + -Programme und Tempdb (Daten), eines für die Haupt-DB Daten und die dritte für Protokolle (sowohl Tempdb als auch Haupt-DBs).
Natürlich sollten Sie sich nicht zu viel Zeit nehmen, um Daten und Protokolle getrennt zu halten, wenn Ihre Workloads nur sehr wenig Schreibvorgänge erfordern, da dies nur einen geringen Leistungsunterschied bewirkt und die Bereitstellung eines ganzen Volumens für sie sehr verschwenderisch wäre Platz.
quelle
Die tatsächliche Antwort hängt von Ihren Anforderungen ab, aber im Allgemeinen ist "Daten speichern und auf verschiedenen Arrays anmelden" von größerer Bedeutung als "Tempdb auf einem eigenen Array ablegen".
Bei der Anzahl der verfügbaren Laufwerke wäre mein Ausgangspunkt:
Verwenden Sie SQLIO , um die Leistung verschiedener Laufwerkskonfigurationen zu testen.
quelle
Abhängig davon, wofür Sie die Datenbank verwenden (OLTP vs. Warehousing), sieht Ihre Konfiguration wie eine gute allgemeine Konfiguration aus. Wenn Sie mehr Festplatten hätten, hätten Sie mehr Optionen.
Sie könnten eine bessere Leistung erzielen, wenn Sie die Festplatte für Ihre TempDB auf RAID 0 (Stripe) umstellen. Es erhöht Ihr Ausfallrisiko, aber da TempDB nur Daten puffert, können Sie keinen Datenverlust feststellen. Die meisten Leute halten das für einen vernünftigen Kompromiss. Halten Sie einfach ein Ersatzteil in der Nähe (oder ein Ersatzteil).
Eine Sache, die Sie nicht erwähnt haben, die Sie aber versuchen könnten (falls Sie dies noch nicht getan haben): Microsoft empfiehlt, Ihre TempDB auf mehrere Dateien aufzuteilen (eine pro CPU). Natürlich ist es am besten, wenn sie sich auf separaten Datenträgern befinden, aber es hilft einfach, separate Dateien zu haben. http://msdn.microsoft.com/en-us/library/ms175527(v=SQL.105).aspx
quelle