هل يمكنني تطبيق Nolock مع إعداد على مستوى قاعدة البيانات؟

StackOverflow https://stackoverflow.com/questions/2836135

  •  26-09-2019
  •  | 
  •  

سؤال

هل هناك طريقة لجعلها مع (nolock) يتم تطبيقها على أي عبارة محددة يتم تشغيلها على قاعدة بيانات معينة؟

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

المحلول

لا ولكن يمكنك استخدام العزلة لقطة مستوى قاعدة البيانات على SQL Server 2005 وما فوق ، يجب أن يساعد كثيرًا مع Deadlocks

يقدم SQL Server 2005 ملحقات لمستويات عزل SQL-92 مع إدخال مستوى عزل اللقطة وتنفيذ إضافي للقراءة. يمكن أن يحل مستوى عزل read_committ_snapshot الجديد باحتفال قراءة جميع المعاملات التي يتم ارتكابها بشفافية.

تحدد عزل Snapshot أن البيانات التي تقرأها في المعاملة لن تعكس أبدًا التغييرات التي أجراها المعاملات المتزامنة الأخرى. تستخدم المعاملة إصدارات صف البيانات الموجودة عندما تبدأ المعاملة. لا يتم وضع أقفال على البيانات عند قراءتها ، لذلك لا تمنع معاملات اللقطة المعاملات الأخرى من كتابة البيانات. المعاملات التي تكتب البيانات لا تمنع المعاملات من قراءة البيانات. تحتاج إلى تمكين عزل اللقطة عن طريق تعيين خيار قاعدة بيانات ALBER_SNAPSHOT_ISOLATION من أجل استخدامه.

يحدد خيار READ_COMMOT_SNAPSHOT DATABASE سلوك مستوى العزلة الافتراضي الملتزم عند تمكين عزل اللقطة في قاعدة بيانات. إذا لم تحدد صراحةً read_committ_snapshot ، فسيتم تطبيق القراءة المرتكبة على جميع المعاملات الضمنية. ينتج عن هذا السلوك نفسه مثل تعيين read_committ_snapshot (الافتراضي). عند إيقاف read_committ_snapshot ، يستخدم محرك قاعدة البيانات أقفال مشتركة لفرض مستوى العزلة الافتراضي. إذا قمت بتعيين خيار READ_COMMOTED_SNAPSHOT DATABASE على تشغيله ، يستخدم محرك قاعدة البيانات إصدار الصفوف وعزل اللقطة باعتباره الافتراضي ، بدلاً من استخدام الأقفال لحماية البيانات.

نصائح أخرى

يعتمد على قاعدة البيانات الخاصة بك. تتيح لك بعض محركات قواعد البيانات الافتراضية للقراءات القذرة أو السلوكيات المماثلة.

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

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