2016-08-03 2 views
1

Merci de prendre le temps de lire ma question. Nous avons construit un système utilisant T-SQL qui traite de grandes quantités de données. Lorsque nous commençons à traiter ces données, cette opération prend généralement environ 15 minutes. Pendant ce temps, pour une raison quelconque, il semble qu'il y ait un verrou sur tous les objets de la base de données. Dans une certaine mesure, je comprends que je ne peux pas interroger les tables qui sont écrites. Mais aussi SQL Server me donne un message de verrouillage de temporisation lorsque j'actualise la liste de tables par exemple (en utilisant F5 sur le noeud Tables dans l'explorateur d'objet).SQL Server Grande transaction verrouillant toutes les tables

Mes oeuvres de code basé sur le modèle suivant:

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 

Maintenant, quand je commence à ce que je peut effectuer des requêtes SELECT AVEC (de NOLOCK) sur une table. Mais je ne peux pas voir les définitions sur les vues, les procédures stockées ou faire tout autre type d'opération dans la base de données.

J'ai déjà défini le paramètre de niveau d'isolement READ UNCOMMITTED, mais cela ne semble pas faire de différence.

Appréciez toute aide à ce sujet.

Cordialement,

+0

niveaux d'isolement affectent la sélection des états travail, ceux-ci n'affectera pas DDL, DML..Locking, sont des sujets grands blocages, donc s'il vous plaît la recherche sur la façon de résoudre les blocages de verrouillage et commence à partir de là – TheGameiswar

Répondre

0

Le code qui est dans votre bloc ESSAYER CATCH effectue une grande quantité de mise à jour des données. Changer le niveau d'isolement ne résoudra pas le problème avec le verrouillage.

Quel est le mieux pour vous est de faire ces contrôles/changements de base:

  • Essayez diviser la mise à jour/insertion en lots plus petits; les choses se déplaceront plus doucement réduisant le verrouillage de manière significative.
  • Vérifiez l'indexation des tables participant à la ou les requêtes de mise à jour afin que les données renvoyées soient plus rapides.
0

Ce problème n'a rien à voir avec le niveau d'isolation, c'est le problème d'Exclusive.

C'est le cas du verrou Escalation jusqu'au niveau de base de données.

Évitez Escalation transiger en lots plus petits ...