Étendues De Niveau D'Isolement De Transaction

Quelles sont les règles de portée pour les niveaux d'isolation des transactions dans SQL Server 2005? Je sais ce que signifient les différents niveaux, mais pas comment les appliquer correctement en dehors d'un script exécuté manuellement. Je ne trouve pas de guide pour une utilisation pratique dans le code de qualité de production.

, Évidemment, la portée commence lorsque vous utilisez une commande comme ceci:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

Mais où cela finit-il? Si je définis le niveau iso dans une procédure stockée et que proc en appelle un autre, le proc imbriqué l'hérite-t-il? Même mieux, si je monte le niveau iso à l'intérieur du proc imbriqué, va-t-il être reporté dans le proc appelant? Les commandes de transaction comme BEGIN TRAN, ROLLBACK et COMMIT font-elles des différences?

Lorsqu'un proc stocké est appelé par une application ou un travail d'agent, les changements de niveau d'isolement persistent-ils d'une manière ou d'une autre? Dois - je toujours revenir à la lecture par défaut validée à la fin de chaque proc?

Je le testerais dans différentes situations mais je ne sais pas comment lire ce que le le niveau d'isolement actuel est défini sur.

39
demandé sur Andrey Morozov 2009-06-25 23:01:06

7 réponses

Exécutez ce qui suit et voyez par vous-même:

CREATE PROCEDURE dbo.KeepsIsolation
AS
BEGIN
PRINT 'Inside sproc that does not change isolation level';
DBCC USEROPTIONS;
END
GO

CREATE PROCEDURE dbo.ChangesIsolation
AS
BEGIN
PRINT 'Inside sproc that changes isolation level';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DBCC USEROPTIONS;
END
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
DBCC USEROPTIONS;
EXEC dbo.KeepsIsolation;
DBCC USEROPTIONS;
EXEC dbo.ChangesIsolation;
-- demonstrates that isolation level restored to REPEATABLE READ after exiting the procedure
    DBCC USEROPTIONS;
36
répondu A-K 2009-08-18 15:44:55

À Partir de MSDN

Si vous émettez SET TRANSACTION ISOLATION LEVEL dans une procédure stockée ou trigger, lorsque l'objet retourne le contrôle, le niveau d'isolement est réinitialisé au niveau en vigueur lorsque l'objet a été invoqué . Par exemple, si vous définissez la lecture répétable dans un lot, et le lot appelle ensuite un stocké procédure qui définit le niveau d'isolement sur SERIALIZABLE, l'isolement le réglage de niveau revient à la lecture répétable lorsque la procédure stockée retourne le contrôle au traitement.

15
répondu Andrey Morozov 2014-02-06 18:35:32

DBCC USEROPTIONS affiche le niveau d'isolement actuel, ainsi que toutes les autres options de jeu.

13
répondu Darryl Peterson 2011-12-09 16:54:52

Des livres en ligne

Un seul de L'isolement de TRANSACTION Les options de niveau peuvent être définies à la fois, et il reste réglé pour cette connexion jusqu'à ce qu'il soit explicitement changé. Ce devient le comportement par défaut à moins l'option d'optimisation est spécifiée à le niveau de la table dans la clause de déclaration.

4
répondu SQLMenace 2009-06-25 19:08:56

Le niveau D'isolement ne recule pas avec la transaction.

Le niveau D'isolement reste à jour même si vous appelez des procédures et des fonctions.

2
répondu Hans Malherbe 2009-06-25 19:36:33

Pour obtenir plus d'informations sur les niveaux D'isolement dans SQL Server, y compris les verrous et son impact sur la base de données en détail avec des exemples, reportez-vous au lien ci-dessous: http://www.sqllion.com/2009/07/transaction-isolation-levels-in-sql-server/

0
répondu 2009-07-03 19:24:48

Veuillez noter qu'il existe un problème avec la portée des niveaux de TRANSACTION et SqlServer 2012 ou version antérieure lorsque les performances sont élevées ADO.NET le regroupement de connexions est utilisé lorsque cela peut persister pendant la fermeture de la connexion:

SQL Server: fuites de niveau D'isolement entre les connexions regroupées

Https://social.msdn.microsoft.com/Forums/sqlserver/en-US/916b3d8a-c464-4ad5-8901-6f845a2a3447/sql-server-2014-reseting-isolation-level?forum=sqldatabaseengine

0
répondu dmc2005 2017-05-23 11:54:33