Frage

Ich habe einen DW im Kimball-Stil (Fakten und Abmessungen in Sternmodellen-keine verspäteten Fakten von Fakten oder Säulen, keine Spalten, die die Abmessungen verändern, außer als Teil von Typ 2, die sich langsam ändern), wobei die tägliche tägliche Verarbeitung zum Einfügen und Aktualisieren von Zeilen (Zeilen einfügen (aktualisieren zu neuen Daten) und monatlichen und täglichen Berichterstattungsprozessen. Die Faktentabellen werden durch die Daten für die einfache Einführung alter Daten aufgeteilt.

Ich verstehe das WITH(NOLOCK) Kann nicht übereinstimmende Daten gelesen werden. Ich möchte jedoch auch keine Schlösser erstellen, die dazu führen, dass die ETL -Prozesse fehlschlagen oder blockieren.

In allen Fällen lesen wir beim Lesen aus der DW von Faktentabellen für ein Datum, das sich nicht ändert (die Faktentabellen werden nach Datum partitioniert) und Dimension Tabellen, die keine Attribute für die Fakten ändern, mit denen sie verknüpft sind .

Also - gibt es Nachteile? - Vielleicht in den Ausführungsplänen oder im Betrieb solcher SELECT-Nur Abfragen, die parallel aus den gleichen Tischen laufen.

War es hilfreich?

Lösung

Solange alles keine Daten sind, gibt es keinen Schaden, aber ich wäre überrascht, wenn es auch viel Nutzen gibt. Ich würde sagen, es ist einen Versuch wert. Das Schlimmste, was passieren wird, ist, dass Sie unvollständige und/oder inkonsistente Daten erhalten, wenn Sie sich in der Mitte eines Stapeleinsatzes befinden. Sie können jedoch entscheiden, ob dies etwas Nützliches ungültig macht.

Andere Tipps

Das brauchen Sie wahrscheinlich:

`Alter database adventureworks set read_committ_snapshot auf;

Änderung der Datenbank AdventureWorks Set degly_snapshot_isolation auf; `

Dann mach weiter und benutze

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

in Ihren Fragen. Laut Bol:

Das Verhalten von LEAD GEFITTED hängt von der Einstellung der Datenbankoption read_commidt_snapshot ab:

Wenn Read_Commidt_Snapshot auf OFF (die Standardeinstellung) eingestellt ist, verwendet die Datenbank -Engine freigegebene Sperren, um zu verhindern, dass andere Transaktionen Zeilen ändern, während die aktuelle Transaktion einen Lesevorgang ausführt. Die freigegebenen Sperren blockieren auch die Anweisung aus Lesezeilen, die durch andere Transaktionen geändert wurden, bis die andere Transaktion abgeschlossen ist. Der gemeinsame Sperrtyp bestimmt, wann er freigegeben wird. Zeilenschlösser werden vor der Verarbeitung der nächsten Zeile veröffentlicht. Seitensperren werden veröffentlicht, wenn die nächste Seite gelesen wird, und Tabellensperren werden beim Abschluss der Anweisung veröffentlicht.

Wenn Read_Commidt_Snapshot eingestellt ist, verwendet die Datenbank -Engine die Zeilenversionierung, um jede Anweisung mit einem transaktions konsistenten Schnappschuss der Daten zu präsentieren, wie sie zu Beginn der Anweisung vorhanden war. Schlösser werden nicht verwendet, um die Daten vor Aktualisierungen durch andere Transaktionen zu schützen.

Ich hoffe das hilft. Raj

Haben Sie überlegt, eine zu erstellen? Datenbank -Snapshot von Ihrem DW und führen Sie Ihre Berichte aus?

Ja. Ihr SQL wird weitaus weniger lesbar sein. Sie werden zwangsläufig einige Nolock -Hinweise verpassen, da SQL -Befehle, die die Nolock -Strategie verwenden, überall hinstellen müssen.

Sie können dasselbe erhalten, indem Sie die Isolationsstufe festlegen

Setzen Sie die Transaktions -Isolationsstufe Lesen Sie nicht übereinstimmende

Am Ende erhalten Sie einen Leistungsschub von 10% (Entschuldigung, ich bin auch zu faul, um den Artikel dafür zu suchen, aber es ist da draußen)

Ich würde sagen, dass ein 10 %er Gewinn nicht wert ist, die Lesbarkeit zu verringern.

Wenn die gesamte Datenbank nur schreibgeschützt ist, ist dies eine bessere Option. Sie erhalten eine lesende Leistung, ohne Ihren gesamten Code ändern zu müssen.

ALTER DATABASE adventureworks SET read_only

Nolock führt eine "schmutzige Lektüre" durch (unabhängig von Lesen, die ungewöhnlich ist, tut dasselbe wie Nolock). Wenn die Datenbank beim Lesen aktualisiert wird, besteht die Gefahr, dass Sie inkonsistente Daten zurückerhalten. Die einzige Möglichkeit besteht darin, entweder das Sperren zu akzeptieren und damit zu blockieren oder eines der beiden neuen Isolationsniveaus zu wählen, die ab 2005 angeboten werden Hier besprochen.

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