Frage

Ich bin mit SQL Server Indexed Views (oder Oracle Materialized Views) vertraut, wir verwenden sie in unseren OLAP-Anwendungen.Sie verfügen über die wirklich coole Funktion, dass sie einen Ausführungsplan übernehmen und ihn der indizierten Ansicht neu zuordnen können, ohne dass vorhandener Code geändert werden muss.

IE.Nehmen wir an, ich hatte einen SPROC, der wirklich teuer war.

[EINIGE SPALTEN] AUSWÄHLEN
FROM Table1 INNER JOIN Table2 [DETAILS]
Innere Join Tabelle 3 [Bündel mehr Beiträge] ...

Wenn ich eine indizierte Ansicht erstellt habe, die eine ähnliche Ergebnismenge enthielt, sendet der Abfrageoptimierer den SPROC höchstwahrscheinlich an meine indizierte Ansicht und nicht an die Basistabellen, und ich erhalte eine große Leistungssteigerung.

Angenommen, ich wollte indizierte Ansichten in einem verwenden OLTP!? Ich meine, die meisten OLTPs (wie diese Seite) sind relativ leselastig. Wenn sie teure Verknüpfungen haben, könnten wir sie erheblich beschleunigen UND möglicherweise Sperrkonflikte reduzieren (http://www.codinghorror.com/blog/archives/001166.html).Noch besser ist, dass Sie keinen Code ändern müssen, sondern nur die indizierte Ansicht erstellen müssen.

Das bedeutet aber auch, dass die Datenbank größer wird, da wir eine Kopie dieser Daten in der indizierten Ansicht behalten müssen ...

Hat jemand jemals indizierte Ansichten verwendet, um Konflikt- oder Geschwindigkeitsprobleme in einem OLTP zu lösen?Wie kommt es, dass ich das noch nie im Einsatz gesehen habe?

War es hilfreich?

Lösung

Materialisierte Ansichten können für die Berichterstattung gegen OLTP nützlich sein, vor allem eine große Anzahl von Zeilen werden aggregiert, um die Ergebnisse zu erhalten. Die Baumaße sind völlig davon abhängig, wie viele Daten Sie speichern. Betrachten Sie es als Cache.

Die schwierige Balance zwischen dem, wie kürzlich müssen die Daten für die Berichte sein, und wie viel einen Treffers Sie auf OLTP Leistung nehmen. Wenn etwas veraltete Daten in Ordnung sind, können Sie in der Lage sein, das Updates während einer Zeit, um die Ansichten zu planen, wenn die Systemaktivität niedrig ist.

Das ein Mal, ich konnte nicht, und muß sehr aktuelle Daten, landete ich einige benutzerdefinierte Entwicklung zu verbrauchen. Jedes Update auf die Basistabelle gebrannt, um einen Auslöser, die einen Datensatz in eine Transaktionstabelle geschrieben. Die Ansicht betrachtete ein gecachten Aggregat, plus das Delta in der Transaktionstabelle gespeichert. Als Systemressourcen erlaubt, wurden die Transaktionen an die aggregierte Tabelle als Delta-Transaktionen angewendet. Das erlaubte mir, bis zum zweiten Daten, gute Leistung für die Berichterstattung (die einzige Aggregation passiert war letzten Transaktionen) und ziemlich wenig Last auf die Datenbank (nur die Größe jeder Verdoppelung schreiben, nicht erneut die Berechnung einer riesigen Summe jedes Mal).

Leider war es komplex zu halten und einfach nicht in Werkzeugen gebaut verwenden. Wenn Sie auf Ihren Berichtsdaten warten können, ist es oft am besten, die in materialisierten Ansichten gebaut zu verwenden und die Refresh-aufzuschieben.

Andere Tipps

Wir verwenden materialisierten Ansichten Dinge zu beschleunigen, wo ich arbeite. Meistens für Berichte gegen das OLTP-System. Viele unserer Berichte ausführen, aus einem Data Warehouse, aber da wir das Lager über Nacht zu aktualisieren, bis zu dem Moment Daten der OLTP-Tabellen kommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top