Zum Inhalt wechseln


Foto

SQL Server Performance steigern

Windows Server 2003 SQL MS SQL

  • Bitte melde dich an um zu Antworten
37 Antworten in diesem Thema

#1 nahemoth

nahemoth

    Member

  • 186 Beiträge

 

Geschrieben 22. Mai 2014 - 14:26

Hallo,
ich würde gerne die Performance eines MSSQL-Servers steigern. Ich habe festgestellt, dass die IO der Festplatte immer am oberen Bereich liegt. Das Datenbankfile liegt auf einem RAID-5 Verbund und das Logfile auf einem Separaten. Das Datenbankfile hat mittlerweile eine Größe von ~70GB.
Würde es hier etwas bringen, das RAID-5 gegen ein RAID-10 zu tauschen und die Datenbank auf mehrere kleine Files zu verteilen?
Oder, wo wären hier noch Ansatzpunkte zur Analyse?

Ich bin leider noch etwas Unerfahren auf diesem Gebiet. Hat mir hier jemand ein paar Tipps?

Vielen Dank!

#2 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 22. Mai 2014 - 14:50

Wichtig wäre zu wissen, wie sich der IO verteilt? Sind das hauptsächlich lesende Zugriffe? Oder wird auch viel geschrieben?


My name is Frank, you can say you to me.

#3 nahemoth

nahemoth

    Member

  • 186 Beiträge

 

Geschrieben 22. Mai 2014 - 15:27

Beim Lesen befindet sich die Rate permanent zwischen 80% und 100%, beim Schreiben hingegen schwankt sie zwischen 0% und 100%. Die Durchschnittliche Warteschlange des Datenträgers bewegt sich zwischen 0% und 25% und hat regelmässig Ausschläge bis 100%. Sind das die Angaben, die Du angefragt hattest?

#4 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 22. Mai 2014 - 15:50

Moin,

 

grundsätzlich kann ein schnelleres Plattensubsystem eine SQL-Datenbank schon sehr beschleunigen. Die von dir genannten Werte lassen durchaus den Schluss zu, dass die Platten den Server ausbremsen. Es kann aber durchaus noch -zig andere Stellen geben, die eine Datenbank oder eine datenbankbasierende Applikation langsam machen, und nur wenige davon lassen sich durch Hardware-Upgrades lösen.

 

Von RAID5 auf RAID10 umzusteigen, kann etwas bringen. Sofern deine Datenbank nicht viel größer wird, könntest du bei der angegebenen Größe durchaus auch über SSD nachdenken.

 

Ob das allerdings wirklich dein Problem löst, lässt sich ohne eine intensive Analyse nicht vorhersagen.

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#5 nahemoth

nahemoth

    Member

  • 186 Beiträge

 

Geschrieben 22. Mai 2014 - 15:53

Hallo Nils, vielen Dank für die Antwort. Wie kann ich denn noch genauer analysieren? oder anders gefragt, was müsste ich analysieren? Danke für die Tipps!

#6 zahni

zahni

    Expert Member

  • 16.390 Beiträge

 

Geschrieben 22. Mai 2014 - 16:40

Du könntest einen Workload tracen und schauen, ob hinten ein  paar sinnvolle neue Indizes rausfallen.

Leider bekommen das die  Entwickler selten selber hin ;)

 

http://msdn.microsof...thowto03_topic4


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#7 nahemoth

nahemoth

    Member

  • 186 Beiträge

 

Geschrieben 22. Mai 2014 - 17:25

Kann es sein, dass Fragmentierung ein Problem ist? Das Datenbankfile wuchs anfangs immer um einen recht geringen Wert, ich glaube 100mb. Ich habe diesen vor einiger Zeit auf 5GB gestellt. Könnte es sein, dass die Datenbankdatei auf dem Datenträger verteilt ist, und das Performance im IO kostet?

#8 Davidxy

Davidxy

    Newbie

  • 63 Beiträge

 

Geschrieben 22. Mai 2014 - 17:37

Könnte sein, weil die Platten dann immer wieder auf entferntere/verteilte Speicherblöcke springen müssen.

 

Ich kann nur aus Erfahrung sagen, dass der Unterschied zwischen einer klassischen Festplatte und einer SSD enorm ist. Das Gedöns mit dem Defragmentieren kann man sich dann auch sparen.

Wenn Geld da ist, kann ich dir die Investition nur ans Herz legen, zumal deine Database nicht wirklich riesig ist.


Bearbeitet von Davidxy, 22. Mai 2014 - 17:38.


#9 NeMiX

NeMiX

    Board Veteran

  • 1.356 Beiträge

 

Geschrieben 22. Mai 2014 - 17:41

Würde dir auch ein Raid1 aus SSDs empfehlen. Mit wenig Geld Einsatz bekommst du sehr viel Performance raus. Ram schadet bei SQL Servern auch nie.



#10 nahemoth

nahemoth

    Member

  • 186 Beiträge

 

Geschrieben 22. Mai 2014 - 17:57

Hm, aber die SSDs haben doch nur eine begrenzte Zahl an Lese-/Schreibzugriffen? und im Vergleich zu SAS können sie doch nur Halbduplex.

Lohnt das?


Bearbeitet von nahemoth, 22. Mai 2014 - 18:10.


#11 Davidxy

Davidxy

    Newbie

  • 63 Beiträge

 

Geschrieben 22. Mai 2014 - 18:19

"Abnutzung" entsteht nur durch die Schreibvorgänge. Die Lesevoränge belasten eine SSD nicht. Geht man von einer Schreibmenge von etwa 40 GB / Tag aus, so sollte die SSD 22 Jahre halten.

Du kannst davon ausgehen, dass die Lebensdauer auf dem Niveau einer herkömmlichen Festplatte ist.

 

Man sollte jedoch immer 10-15% Speicherplatz auf den SSD´s freilassen, weil die Performance sonst einbricht. Das brauchen die SSD-Controller für ihre Verwaltungsaufgaben. (Wear-Levelling, TRIM, Garbage Collection).

Sollte man also vor dem Kauf (Festplattengrösse) einkalkulieren.

 

Andere Vorteile sind neben der Geschwindigkeit auch die Geräuschentwicklung (keine, weil keine mechanischen Bauteile), dem geringeren Stromverbrauch und die sehr geringe Wärmeentwicklung.

Keine mechanischen Bauteile die Hitze erzeugen....


Bearbeitet von Davidxy, 22. Mai 2014 - 18:20.


#12 nahemoth

nahemoth

    Member

  • 186 Beiträge

 

Geschrieben 22. Mai 2014 - 18:26

Hm, aber die Übertragungsrate ist gleich wie bei SAS, also bringt sie hier doch keinen Vorteil, oder übersehe ich hier etwas?

#13 Daniel -MSFT-

Daniel -MSFT-

    Expert Member

  • 2.434 Beiträge

 

Geschrieben 22. Mai 2014 - 19:31

Keine Sorge: Die Übertragungsraten von SSDs sind deutlich höher, als von Festplatten. Aber das ist nicht der entscheidende Faktor. Bei Datenbanksystemen geht es nicht um linearen Datendurchsatz, sondern um Latenz und Operationen pro Sekunde (IOPS). Was Du wirklich übersiehst, ist die Tatsache, dass bei konventionellen Festplatten die Leistung von der Umdrehungszahl und der zugehörigen Elektronik abhängt. So erreicht selbst eine 15k HDD nur <350 IOPS. Da bei SSDs keine Datenscheiben rotieren, haben sie keine relevante Latenz. Sie können 100.000 IOPS und mehr erreichen. Das ist im Vergleich ein Handwagen zum Ziehen gegen einen Sportwagen. Du bräuchtest hunderte Festplatten, um annähernd die gleiche Leistung wie eine einzelne SSD zu erreichen.

 

Achte nur darauf, dass Du Server-taugliche SSDs samt RAID-Controller einbaust, die auch im RAID TRIM unterstützen und die Partition sauber ausrichten.


Bearbeitet von Daniel -MSFT-, 22. Mai 2014 - 19:32.

.: Daniel Melanchthon :.

 

Ich arbeite für die Microsoft Deutschland GmbH.

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität.

 

Hinweis zur Rechtsverbindlichkeit dieser Informationen

Diese Informationen sind Hinweise, die das Verständnis hinsichtlich der Microsoft Produktlizenzierung verbessern sollen. Microsoft weist ausdrücklich darauf hin, dass diese Informationen keinen rechtsverbindlichen Charakter haben, sondern als erklärende Informationen zu verstehen sind. Die einzig rechtsverbindlichen Lizenzinformationen sind in den entsprechenden Endnutzer-Lizenzverträgen (als Beilage zu Softwarepaketen oder in Form von Lizenzverträgen) zu finden.


#14 zahni

zahni

    Expert Member

  • 16.390 Beiträge

 

Geschrieben 22. Mai 2014 - 19:41

Ich nur nochmals wiederholen: Storage ist wichtig, Optimierungen in der DB sollten aber zuerst ausgereizt werden.

Die Geschwindigkeit  mancher Abfragen lassen sich mit passenden Indizes um ein vielfaches Steigern. Auch die I/O-Rate sinkt durch Indizes da die Anzahl der Full Table Scans reduziert wird. 

Tabellen sollten auch regelmäßig reorganisiert und die Statistiken erneuert werden..  


Bearbeitet von zahni, 22. Mai 2014 - 19:45.

Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#15 nahemoth

nahemoth

    Member

  • 186 Beiträge

 

Geschrieben 22. Mai 2014 - 19:55

An dem Design der Datenbank kann ich leider nichts ändern, das gibt mir der Softwarehersteller vor.

Mein Problem ist, dass die Anwender an manchen Tagen sagen, dass das Programm wiedermal sehr langsam ist. Den Terminalserver auf dem die Anwendung läuft konnte ich ausschliessen. Auch von Netzwerkseite her ist, laut unseren Technikern, noch Platz nach oben.

Mir ist dann ebn aufgefallen, dass die IOs die Platte ziemlich an die Grenze bringen.

 

Kann es sein, dass Fragmentierung ein Problem ist? Das Datenbankfile wuchs anfangs immer um einen recht geringen Wert, ich glaube 100mb. Ich habe diesen vor einiger Zeit auf 5GB gestellt. Könnte es sein, dass die Datenbankdatei auf dem Datenträger verteilt ist, und das Performance im IO kostet?

 

wie könnte ich dies korrigieren? gibt es hier eine Möglichkeit die Datei zu "defragmentieren"? genügt es die DB offline zu nehmen und sie dann auf einen anderen Datenträger zu verschieben und dann wieder zurück zu kopieren?

Ich würde erst gerne die Softwarefehler ausschliessen, vor ich neue Hardware beschaffe.

 

Danke!





Auch mit einem oder mehreren der folgenden Tags versehen: Windows Server 2003, SQL, MS SQL