Wann sollten nicht gruppierte Indizes in separaten Dateigruppen gespeichert werden?

16

Ich habe gehört, dass das Speichern von Indizes in einer anderen Dateigruppe und auf einem anderen Laufwerk die Leistung in einer Datenbank erhöht, da das Laufwerk nicht zwischen dem Index und den Daten, auf die sich der Index bezieht, hin und her wechseln muss. Ich habe auch gehört, dass dies ein Mythos ist.

Wann ist es ratsam, nicht gruppierte Indizes auf einer separaten Dateigruppe und einem separaten Laufwerk zu speichern? Welche Perfmon / Profiler-Beweise würden mich zu diesem Schluss führen? Spielt Hardware eine Rolle bei der Entscheidung (ob ein RAID / SAN über ein einzelnes Laufwerk verwendet wird)?

Michael Hedgpeth
quelle

Antworten:

10

Der langsamste Teil eines DB-Systems sind die Festplatten. Durch das Beseitigen von Engpässen auf Festplattenebene wird die Leistung verbessert. Wenn Daten nachgeschlagen werden und ein Index verwendet wird, wird zuerst der Index nachgeschlagen und dann werden die entsprechenden Daten abgerufen. Wenn sich sowohl der Index als auch die Daten auf denselben Datenträgern befinden, kommt es zu Konflikten. Wenn sich die Daten auf einer anderen (physischen) Festplatte befinden, geschieht die E / A-Verarbeitung schneller, wodurch die Leistung gesteigert wird. Zu beachten ist vor allem, dass sich die Daten oder der Index auf separaten physischen Datenträgern oder LUNs befinden.

Sie würden ein solches Szenario verwenden, wenn Sie eine bessere Leistung Ihres Systems erzielen möchten, sofern Sie über die Festplatten verfügen. Für Ihre perfmon Zähler Sie nutzen könnten Physical Disk – Avg. Disk sec/Read, Physical Disk – Avg. Disk sec/Write, Physical Disk – Disk Reads/sec, Physical Disk – Disk Writes/secein haben , vor und nach dem Vergleich der Änderungen.

StanleyJohns
quelle
1
Wenn ich anstelle von zwei separaten physischen Festplatten die Indizes und Daten auf zwei separaten Festplatten verwalte, z. B. D: \ und E: \, die auf derselben Festplatte vorhanden sind, kann ich trotzdem eine Leistungssteigerung erzielen, wenn ich die Konflikte beim Lesen berücksichtige der festplattenspeicher?
RBT
5

Es ist sicher richtig, dass das Verteilen Ihrer gleichzeitigen E / A auf verschiedene Laufwerke die Leistung steigert - das ist kein Mythos. Es ist ein Mythos, dass zweimaliges Ausführen die Leistung wieder verbessert.

Wenn Sie das Gleiche tun , ist es Zeitverschwendung, Ihr Array in zwei Partitionen aufzuteilen und Indizes für eine und Tabellen für eine andere zu erstellen.

Jack Douglas
quelle
Ich stimme zu, aber ich glaube nicht, dass er darum gebeten hat.
NTDLS
Die Frage lautete: "Spielt Hardware eine Rolle bei der Entscheidung (ob ein RAID / SAN über ein einzelnes Laufwerk verwendet wird)?". Meine Antwort lautet im Grunde: Wenn Sie RAID verwenden, müssen Sie keine Indizes und Tabellen aufteilen. Das heißt nicht, dass Sie es unbedingt tun sollten, auch wenn Sie kein RAID haben ...
Jack Douglas
5

Das Trennen von Indizes von Daten auf separate Dateigruppen = Leistungsverbesserung ist höchst umstritten. Die Leistungsverbesserung "kann" eintreten, wenn Sie die zugrunde liegende Hardware haben, um sie zu unterstützen, aber nur durch die Tatsache, dass das Trennen in verschiedene Dateigruppen Ihnen keinen Leistungsschub gibt. Aus diesem Grund ist es auch NICHT einfach, den Leistungsschub zu messen.

Ref: http://weblogs.sqlteam.com/dang/archive/2008/08/01/Are-you-a-DBA-Monkey.aspx

Sie sollten die Frage zuerst stellen. Warum musst du das tun?

  1. Möchten Sie die Leistung von Sicherungen verbessern, indem Sie die Indizes NICHT einbeziehen?
  2. Möchten Sie die Leistung von Lese- und Schreibvorgängen in diesen Indizes verbessern?
  3. Tun Sie dies für eine bessere Verwaltbarkeit der Platzierung der zugrunde liegenden Objekte?
  4. Haben Sie große Datenmengen mit unterschiedlichen Leistungsanforderungen?
  5. Möchten Sie SSDs für nicht gruppierte Indizes verwenden, um die Leistung usw. zu verbessern?

Ich habe mir diese Aufgabe angesehen, um die Notwendigkeit von # 5 in der obigen Liste zu untermauern, und es scheint mir ein guter Vorschlag zu sein, obwohl wir noch nicht darauf reagiert haben.

Beachten Sie, dass diese Entscheidung NICHT so einfach zu treffen ist und Sie herausfinden müssen, was Sie tun möchten, und sicherstellen müssen, dass Sie die zu unterstützende Hardware haben. Nehmen Sie solche Änderungen erst dann vor, wenn Sie einen guten Test durchgeführt haben und eine deutliche Verbesserung der Leistung feststellen. Andernfalls können Sie diese Idee auch verwerfen. Es lohnt sich NICHT, wenn Sie einen Leistungsschub erwarten, indem Sie die Indizes einfach in separate Dateigruppen aufteilen.

Sankar Reddy
quelle
Ich mag Dans Artikel :-). Ich denke, es passiert uns allen, alte Unternehmensstandards zu importieren und irgendwann die Nützlichkeit in Frage zu stellen.
Marian
1

Ich erzähle Ihnen meine persönlichen Erfahrungen zu diesem Artikel. Die nicht gruppierten Indizes sollten in einer separaten Dateigruppe gespeichert werden, wenn das aktuelle Laufwerk nicht groß genug für den benötigten Speicherplatz ist :-). Sie können darüber lachen .. aber es passiert.

Eine Notlösung für uns, als wir im Begriff waren, ohne freien Speicherplatz auf einem Datenlaufwerk zu bleiben, bestand darin, ein nettes Skript zu erstellen, um alle nicht gruppierten Indizes online auf einer neuen Dateigruppe auf einem Laufwerk mit freiem Speicherplatz neu zu erstellen. Man könnte meinen, dass es einfach und schnell ist, neuen Speicher zu kaufen. Aber so ist es eigentlich nicht.

In Bezug auf die Leistung haben wir nach dem Umzug nichts Außergewöhnliches gesehen. Aber es ist eine große SAN-Aufbewahrungsbox, in der alles zusammengehalten wird :-).

Marian
quelle
1

Allgemein; Das Aufteilen von Daten und Indizes auf separate Festplatten mit ähnlicher Leistung kann die Leistung für umfangreiche Schreibvorgänge in diese Tabelle oder für umfangreiche Lesevorgänge , die diesen Index verwenden, erhöhen. Eine ähnliche Methode wie bei einigen anderen E / A-Vorgängen, z. B. eine partitionierte Tabelle, die auf mehrere physische Festplatten verteilt ist.

Es ist jedoch auch stark von der Lagerung abhängig . Beispielsweise; wenn Sie einen Server mit einem netten Fushion ioDrive (oder ähnlichem) haben und auch einzelne Drehscheiben haben. Es ist möglicherweise vorteilhafter, alles auf dem ioDrive zu belassen (es sei denn, der Speicherplatz ist begrenzt). Es gibt auch andere Dinge zu berücksichtigen - RAID-Konfiguration, Netzwerkspeicherkonfiguration.

Führen Sie ein Benchmarking entweder auf einem Testserver mit ähnlicher Hardware oder (nur wenn kein sekundärer Server verfügbar ist) außerhalb der Stoßzeiten mit temporären Daten durch. Der obige DBA-Monkey-Link von Sankar ist ein guter Anlass zum Nachdenken.

GP Van Eron
quelle