2016-08-03 5 views
1

Danke, dass Sie sich die Zeit genommen haben, meine Frage zu lesen. Wir haben ein System mit T-SQL entwickelt, das (große) Datenmengen verarbeitet. Wenn wir mit der Verarbeitung dieser Daten beginnen, dauert dieser Vorgang in der Regel etwa 15 Minuten. Während dieser Zeit scheint es aus irgendeinem Grund eine Sperre für alle Objekte in der Datenbank zu geben. Zu einem gewissen Grad verstehe ich, dass ich keine Tabellen abfragen kann, in die geschrieben wird. Aber auch SQL Server gibt mir eine Timeout-Sperrmeldung, wenn ich beispielsweise die Liste der Tabellen aktualisiere (mit F5 im Knoten Tabellen im Objekt-Explorer).SQL Server Große Transaktion, die alle Tabellen sperrt

Werke Mein Code basiert auf der folgenden Vorlage:

CREATE PROCEDURE Sample 

as 

SET NOCOUNT, XACT_ABORT ON 

BEGIN TRY 

BEGIN TRANSACTION 

... 

COMMIT TRANSACTION 

END TRY 

BEGIN CATCH 
    BEGIN 
     PRINT 'STORED PROCEDURE - Returned errors while processing' 
     ROLLBACK TRANSACTION 
    END 
END CATCH 

Nun, wenn ich beginnen diese I SELECT MIT durchführen kann (NOLOCK) Abfragen auf jedem Tisch. Aber ich kann keine Definitionen für Ansichten, gespeicherte Prozeduren oder im Grunde irgendeine andere Art von Operation in der Datenbank sehen.

Ich habe bereits die READ UNCOMMITTED Isolationsstufe festgelegt, aber das scheint keinen Unterschied zu machen.

Schätzen Sie jede Hilfe in dieser Angelegenheit.

Mit freundlichen Grüßen

+0

Isolationsstufen beeinflussen, wie select-Anweisungen arbeiten, die werden nicht beeinflussen DDL, DML..Locking, Blockierungen sind große Themen, so suchen Sie bitte auf, wie Sperren Blockierungen lösen und fang von dort an – TheGameiswar

Antwort

0

Der Code, der in Ihrem TRY CATCH-Block ist führt eine große Menge an Daten zu aktualisieren. Durch Ändern der Isolationsstufe wird das Problem beim Sperren nicht gelöst.

Was ist für Sie am besten ist, ist diese grundlegende Überprüfungen/Änderungen zu tun:

  • versuchen, das Update teilen/in kleinere Chargen einfügen; Die Dinge werden sich reibungsloser bewegen und die Verriegelung wird deutlich reduziert.
  • Überprüfen Sie die Indexierung der Tabellen, die an den Aktualisierungsabfragen teilnehmen, so dass die Daten schneller zurückgegeben werden.
0

Dort Problem haben nichts mit Isolationsebene zu tun, es ist das Problem der Exklusivität.

Es ist Fall der Sperre Escalation bis Datenbankebene.

Vermeiden Eskalations tun kleinere Batch-Transaktionen ...

Verwandte Themen