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.
- Sind die obigen Aussagen wahr?
Was sind die primären "Variationen" zwischen Datenkomprimierung und anderen (zum Lesen)
- "CPU + x%"?
- "IO -y%"?
- Seitenteilung?
- Tempdb-Nutzung?
- RAM-Auslastung?
- 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).
Antworten:
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.
quelle
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.
quelle