it-swarm.asia

ما هي المخاطر الموجودة في حالة تمكين قراءة اللقطة الملتزمة في خادم SQL؟

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

على سبيل المثال. هل سيؤثر هذا على استعادة قاعدة البيانات؟ هل هناك أي شيء آخر علينا القيام به للاستفادة من هذا؟

أخطط لتنفيذ هذه الأوامر:

ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON

أعتقد أن هذا سوف يعطينا شيئًا أقرب إلى Oracle حيث أنه إذا كانت إحدى المعاملات يتم تحديث المعاملات الأخرى ، فلا يزال بإمكانها قراءة البيانات القديمة. هل هذا صحيح؟

أنا أبحث في هذا لأنني سئمت من مشاكل القفل في SQL Server 2005. آمل أن هذا قد يقلل من حالات الجمود العرضية التي يشاهدها المستخدمون ، ويساعد على الأداء العام لتطبيقنا ويشجع مطورينا على القيام بأكثر من عملية واحدة لكل معاملة بدون خوف.

73
Adam Butler

ملخص

  1. إذا كانت لديك مشاكل في القفل ، فلديك مشكلة في الرمز الخاص بك: إنه ليس محرك قاعدة البيانات
  2. إنها ليست رصاصة سحرية
  3. يمكنك إضافة المزيد من المشاكل

تحميل

كما سيزيد الحمل على tempdb و وحدة المعالجة المركزية . انظر أيضا:

الأمان

الأهم ، عزل اللقطات ليست آمنة في كثير من الحالات افتراضيًا. اقرأ "لقطة اللقطات" (ويكيبيديا) لمزيد من المعلومات حول حالات الانحراف في الكتابة. القسم التالي هو "جعل تسلسل عزل اللقطة" للتغلب على هذا.

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

انظر أيضا:

49
gbn

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

في تجربتي ، فإن الحمل الإضافي على TEMPDB لا يكاد يذكر وفوائد إصدار الصفوف في تقليل القراء المحظورين ضخمة.

كمرجع ، يعد إصدار الصفوف (عزل اللقطة) هو الطريقة التي استخدمتها أوراكل لعقود لتحقيق العزلة دون حظر القراء وقواعد بيانات Oracle التي عملت عليها لما يقرب من 20 عامًا من الخبرة بعيدة مشكلات حظر أقل من SQL الخادم يفعل. يتردد معظم مطوري SQL في استخدام عزل اللقطات على الرغم من أنهم اختبروا التعليمات البرمجية الخاصة بهم فقط مقابل قواعد البيانات التي تستخدم الإعداد الافتراضي.

36
Chuck

بضع نقاط إضافية لإضافتها إلى الإجابات الأخرى:

SET ALLOW_SNAPSHOT_ISOLATION ON يمكّن عزل اللقطة فقط في قاعدة البيانات. للاستفادة من ذلك ، يجب عليك إعادة التسجيل و SET TRANSACTION ISOLATION LEVEL SNAPSHOT للمعاملات التي تريد تطبيقها عليها. يجب تغيير رمز الاتصال للتعامل مع أخطاء تعارض التحديث.

بعد SET READ_COMMITTED_SNAPSHOT ON ، تستخدم العبارات عند القراءة إصدار الصف. ملاحظة ، هذا هو مستوى العبارة - إصدار صف للقراءة فقط . بالنسبة للتحديثات ، يتم استرداد الصف "الحقيقي" وتطبيق أقفال التحديث. راجع قسم ملخص السلوك في فهم مستويات العزل القائمة على تعيين صف الصفوف

في كلتا الحالتين ، من دون اختبار شامل ، من المحتمل أن تقدم مجموعة جديدة تمامًا من المشاكل للنظام.

26
Mark Storey-Smith

أعتقد أن هذا سوف يعطينا شيئًا أقرب إلى Oracle حيث أنه إذا كانت إحدى المعاملات يتم تحديث المعاملات الأخرى ، فلا يزال بإمكانها قراءة البيانات القديمة. هل هذا صحيح؟

نعم هذا صحيح .

تستحق قراءة الروابط في إجابة gbn وأعتقد أن الشيء نفسه ينطبق على MVCC الافتراضي لـ Oracle مثل SQL Server في وضع عزل اللقطات. أود أن أضيف أنه إذا فهمت المزالق المحتملة ، فإن فوائد IMO تفوق بكثير الصعوبات المضافة (التحدث من منظور أوراكل) - وبالطبع تختفي بعض مشكلات القفل بشكل شرعي ، فهذه هي نقطة MVCC (هناك أيضًا فئة من مشكلات القفل التي لن تختفي بسبب مشكلات التعليمات البرمجية ، ولكن أفترض أنك تفهم ذلك).

19
Jack says try topanswers.xyz

نحن نستخدم SNAPSHOT ISOLATION في جميع مشاريعنا التي تستخدم SQL Server DB. لا مزيد من أخطاء SQL 1205 ، التي لا تحدث بسبب رمز تطبيق خاطئ ، ولكن بسبب قفل الصفحة الافتراضي وسلوك قفل الصف.

تأثير الأداء ضئيل للغاية وقد مرت حتى الآن 7 سنوات ، وتمت معالجة مئات الملايين من العمليات في أنظمة مختلفة ، دون أي مشاكل تتعلق بعزل SNAPSHOT.

تعتبر الحالات التي تقوم فيها عدة سلاسل رسائل مختلفة بتحديث المعلومات الهامة للأعمال في صف واحد بالتوازي استثنائية للغاية ، واحتمالات أن يكون SNAPSHOT ISOLATION هو سبب أي مشكلة عدم تناسق قريبة جدًا من الصفر.

إذا كان لديك نظام OLTP ، فإن ذلك عن طريق التصميم يقوم بتحديث صف واحد بناءً على بيانات الصف الحالي في العديد من سلاسل الرسائل ، بالطبع لا يتم قبول SNAPSHOTS في مثل هذه الحالات.

10
Alexander Nemsadze