سؤال

قمت بتشغيل الاستعلام التالي:

SELECT session_id,CASE transaction_isolation_level 
WHEN 0 THEN 'Unspecified' 
WHEN 1 THEN 'ReadUncommitted' 
WHEN 2 THEN 'ReadCommitted' 
WHEN 3 THEN 'Repeatable' 
WHEN 4 THEN 'Serializable' 
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL 
FROM sys.dm_exec_sessions 
Where transaction_isolation_level = 4 

وثم:

DBCC INPUTBUFFER(157)

حيث كان 157 أحد الجلسات السابقة ، لمشاهدة بيان إحدى نتائج الاستعلام رقم.1.

أظهرت ما يلي:

(@ID uniqueidentifier) SELECT * FROM PS WITH (NOLOCK) WHERE ID = @ID

كيف يمكن تشغيل العبارة التي تستخدم WITH (NOLOCK) بمستوى العزل Serializable؟هل هناك أي شيء "يتجاوز" With (NOLOCK)؟

هل كانت مفيدة؟

المحلول

تلميحات القفل متعامدة مع مستوى العزل.بينما يعالجون مخاوف مماثلة ، فإن إضافة تلميح قفل لا يغير مستوى العزل.ستظل معاملتك معاملة "قابلة للتسلسل".بالطبع ، يجعل تلميح القفل عملية الاستعلام نفسها تنتهك قابلية تسلسل المعاملة ، لكنك تبحث في خاصية المعاملة .

نصائح أخرى

يقوم الاستعلام الخاص بك بالإبلاغ عن الإعداد على مستوى الجلسة لمستوى عزل المعاملة ، والذي تم تعيينه على التسلسل.

يؤدي استخدام تلميح NOLOCK (أو مرادفه READUNCOMMITTED) إلى تجاوز مستوى عزل الجلسة للوصول إلى الكائن المحدد (الجدول في هذه الحالة) الذي تم تحديد التلميح عليه.

لذلك ، لا تزال المعاملة قيد التشغيل في ظل عزل قابل للتسلسل ، ولكن سيتم إجراء الوصول إلى الجدول PS باستخدام READUNCOMMITTED دلالات عزل.

توثيق:

القراءة ذات الصلة:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى dba.stackexchange
scroll top