Ist die SQL Server-Datenkomprimierung für schreibgeschützte Datenbanken kategorisch gut?


11

In einigen Literaturstellen zur SQL Server-Datenkomprimierung, die ich gelesen habe, heißt es, dass sich die Schreibkosten auf das Vierfache der normalerweise erforderlichen Kosten erhöhen. Es scheint auch zu implizieren, dass dies der Hauptnachteil der Datenkomprimierung ist, was stark impliziert, dass bei einer schreibgeschützten Archivdatenbank die Leistung (mit wenigen Ausnahmen) durch die Verwendung der Datenkomprimierung von 100% gefüllten Seiten verbessert wird.

  1. Sind die obigen Aussagen wahr?
  2. Was sind die primären "Variationen" zwischen Datenkomprimierung und anderen (zum Lesen)

    • "CPU + x%"?
    • "IO -y%"?
    • Seitenteilung?
    • Tempdb-Nutzung?
    • RAM-Auslastung?
  3. Und zum Schreiben?

Für die Zwecke dieser Frage können Sie den Kontext auf die Komprimierung einer großen Datenbank (> 1 TB) auf PAGE-Ebene beschränken. Zusätzliche Kommentare sind jedoch immer willkommen.


Verweise:

SQL Server Storage Engine-Blog (Das DW-Szenario zeigt, dass die Komprimierung sehr vorteilhaft ist.)
Datenkomprimierung: Strategie, Kapazitätsplanung und Best Practices

Ein detaillierterer Ansatz zur Entscheidung, was komprimiert werden soll, umfasst die Analyse der Workload-Eigenschaften für jede Tabelle und jeden Index. Es basiert auf den folgenden zwei Metriken:

U: Der Prozentsatz der Aktualisierungsvorgänge für eine bestimmte Tabelle, einen bestimmten Index oder eine bestimmte Partition im Verhältnis zu den Gesamtvorgängen für dieses Objekt. Je niedriger der Wert von U ist (dh die Tabelle, der Index oder die Partition werden selten aktualisiert), desto besser ist der Kandidat für die Seitenkomprimierung.
S: Der Prozentsatz der Scanvorgänge für eine Tabelle, einen Index oder eine Partition im Verhältnis zu den Gesamtvorgängen für dieses Objekt. Je höher der Wert von S (dh die Tabelle, der Index oder die Partition werden meistens gescannt), desto besser ist der Kandidat für die Seitenkomprimierung.

Beide oben genannten Punkte sind nachweislich darauf ausgerichtet, die Seitenkomprimierung für DW-Datenbanken zu empfehlen (leseintensive / exklusive Big-Data-Operationen).


Welche Literatur speziell? Es wird immer CPU-Overhead sowohl für das Komprimieren als auch für das Dekomprimieren geben, aber wie beim Lesen schreiben Sie auch auf weniger Seiten. Tatsächlich würde ich denken, dass die Schreibseite noch mehr als die Leseseite profitieren würde, da auf der Leseseite häufig die komprimierten Seiten im Speicher gespeichert sind (dies ist nicht immer der beste Fall, abhängig von der Größe der Daten und dem zugewiesenen Speicher).
Aaron Bertrand

3
Es wird sehr schwierig sein, eine der von Ihnen angeforderten Metriken bereitzustellen, da dies vollständig von der Art der Daten und der Fähigkeit zur Komprimierung abhängt (und dies wird auch je nach Zeile und Seite unterschiedlich sein ). Einige Leute haben eine Komprimierungsrate von bis zu 90% angegeben, was sich sowohl positiv auf die Speichernutzung als auch auf die CPU auswirken wird, um so viel Komprimierung durchzuführen. Dieses Papier erhöht den CPU-Overhead bei 10% für die Zeilenkomprimierung und höher für die Seite . Was Sie beobachten, kann ganz anders sein.
Aaron Bertrand

1
Für eine schreibgeschützte Archivdatenbank würde sich wohl die Frage stellen, ob sie in den Speicher passt. Wenn alles in den Speicher passt, hat das Komprimieren nach dem Laden in den Pufferpool keinen wirklichen Vorteil. Wenn jedoch nicht alles in den Speicher passt, kann es dennoch von Vorteil sein, weniger Seiten in den Cache und aus dem Cache zu tauschen, auch wenn die Dekomprimierung durchgeführt wird.
Aaron Bertrand

Keiner der von Ihnen hinzugefügten Links scheint diese 4x Strafe für das Schreiben zu erwähnen. Erinnerst du dich, wo du das aufgenommen hast? Möchte den Kontext sehen.
Aaron Bertrand

1
Nun, wenn Sie die Daten nicht in den Speicher einpassen können, ist dieses Szenario ziemlich umstritten, oder? :-)
Aaron Bertrand

Antworten:


6

Nur meine 2 Cent aus meinen eigenen Experimenten mit 1-2 Jahre alter Hardware:

Schreibgeschützte Operationen (Scans, Sortierungen usw. im DW-Stil) für seitenkomprimierte Tabellen (~ 80 Zeilen / Seite) Ich habe festgestellt, dass sie bei einer Reduzierung der Komprimierungsgröße um ~ 3x ausgeglichen sind.

Wenn die Tabellen ohnehin in den Speicher passen, wirkt sich die Seitenkomprimierung nur dann positiv auf die Leistung aus, wenn die Datengröße um mehr als das Dreifache verringert wurde. Sie scannen weniger Seiten im Speicher, aber das Scannen jeder Seite dauert länger.

Ich denke, Ihr Kilometerstand kann variieren, wenn Ihre Pläne verschachtelt und suchlastig sind. Dies wäre unter anderem auch hardwareabhängig (Zugriffsstrafen für fremde NUMA-Knoten, Speichergeschwindigkeit usw.).

Das Obige ist nur eine grobe Faustregel, die ich befolge, basierend auf meinen eigenen Testläufen mit meinen eigenen Abfragen auf meiner eigenen Hardware (Dell Poweredge 910 und jünger). Es ist kein Evangelium wie!

Bearbeiten: Gestern wurde die hervorragende SQLBits XI-Präsentation von Thomas Kejser als Video zur Verfügung gestellt. Sehr relevant für diese Diskussion, zeigt es das "hässliche" Gesicht der CPU-Kosten für die Seitenkomprimierung - Aktualisierungen werden um das Vierfache verlangsamt, Sperren werden viel länger gehalten.

Allerdings , Thomas wird mit FusionIO Lagerung und er nahm eine Tabelle , die nur ist ‚nur‘ Anspruch auf Seite Komprimierung. Wenn sich der Speicher in einem typischen SAN befand und die verwendeten Daten 3x-4x komprimiert waren, war das Bild möglicherweise weniger dramatisch.


1
Kann das die alte Hardware sein? Auf neuer Hardware, nackte SSD Für die Speicherung finde ich, dass die Kerne nicht leicht mit den Discs mithalten können. Ich denke normalerweise, dass der Nutzen viel einfacher anfangen würde - eine Reduzierung der E / A um 50% lohnt sich, wenn nicht so viele Änderungen vorgenommen werden.
TomTom

TomTom, Storage kommt für diese Figuren nicht ins Spiel. Der Vergleich erfolgt zwischen unkomprimierten Tabellen im Speicher und komprimierten Tabellen im Speicher.
John Alan

Ich habe noch nie einen DWH gesehen, der gut genug für die Erinnerung war. Ernsthaft. Sie werden auf Disc zurückgreifen.
TomTom

1
Ja, natürlich werden Sie gelegentlich auf die Festplatte zurückgreifen - beim Lesen von der Festplatte hat die Seitenkomprimierung fast immer einen Vorteil (vorausgesetzt, die Daten sind ausreichend komprimierbar!). Aber wenn Ihre Workload einmal von der Festplatte geladen wird und dann für den Rest des Tages alles im Speicher bearbeitet - wie viel Gewicht würden Sie dem Lesen der Festplatte und wie viel den In-Memory-Vorgängen beimessen?
John Alan

1
Ich bin gerade auf ein relevantes Präsentations-Slidedeck aus SQLBits 2013 von Thomas Kejser gestoßen: slidehare.net/fusionio/…
John Alan

0

Ich kann einige Wörter aus meiner Data Warehouse-Umgebung hinzufügen.

Durch die Implementierung der Komprimierung (in meinem Fall PAGE) für eine Testtabelle mit 30 Millionen Zeilen (18 GB) wird die Größe der Tabelle von 18 GB auf 3 GB reduziert! (Speichereffizienz sicher), aber erhöhen Sie die Ladezeit (Schreiben) von 22 auf 36 Minuten.

Zum Lesen oder Lesen und Speichern der Daten im Speicher könnte dies eine gute Lösung sein, aber beim täglichen Laden von Daten kann dies zu einer Leistungsminderung führen.

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.