Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server - Zusammenführen großer Tabellen ohne Sperren der Daten

Ändern Sie Ihr Frontend, um NOLOCK oder READ UNCOMMITTED zu verwenden, wenn Sie selects ausführen .

Sie können MERGE, INSERT oder UPDATE nicht sperren, da die Datensätze gesperrt werden müssen, um die Aktualisierung durchzuführen. Sie können die SELECTS jedoch NOLOCKEN.

Beachten Sie, dass Sie dies mit Vorsicht verwenden sollten. Wenn Dirty Reads in Ordnung sind, dann fahren Sie fort. Wenn die Lesevorgänge jedoch die aktualisierten Daten erfordern, müssen Sie einen anderen Weg einschlagen und genau herausfinden, warum das Zusammenführen von 3M-Datensätzen ein Problem verursacht.

Ich würde darauf wetten, dass die meiste Zeit damit verbracht wird, während des Zusammenführungsbefehls Daten von der Festplatte zu lesen und/oder Situationen mit geringem Arbeitsspeicher zu umgehen. Sie könnten besser dran sein, einfach mehr RAM in Ihren Datenbankserver zu stopfen.

Eine ideale Menge wäre, genügend RAM zu haben, um die gesamte Datenbank nach Bedarf in den Speicher zu ziehen. Wenn Sie beispielsweise eine 4-GB-Datenbank haben, stellen Sie sicher, dass Sie über 8 GB RAM verfügen. Natürlich auf einem x64-Server.