ما هي مشاكل استخدام المعاملات في قاعدة البيانات؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

من هذا المشنور.إحدى المشاكل الواضحة هي قابلية التوسع/الأداء.ما هي المشاكل الأخرى التي قد يثيرها استخدام المعاملات؟

هل يمكنك القول أن هناك مجموعتين من المشاكل، واحدة للمعاملات طويلة المدى والأخرى للمعاملات قصيرة المدى؟إذا كانت الإجابة بنعم، كيف يمكنك تعريفهم؟

يحرر:يعد حالة الجمود مشكلة أخرى، ولكن قد يكون عدم تناسق البيانات أسوأ، اعتمادًا على مجال التطبيق.بافتراض وجود مجال يستحق المعاملة (الخدمات المصرفية، لاستخدام المثال الأساسي)، فإن احتمال حدوث حالة توقف تام هو أشبه بتكلفة يجب دفعها مقابل ضمان اتساق البيانات، وليس مشكلة في استخدام المعاملات، أو هل ستختلف؟إذا كان الأمر كذلك، ما هي الحلول الأخرى التي ستستخدمها لضمان اتساق البيانات الخالية من الجمود؟

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

المحلول

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

كما أن التراجع عن المعاملات يمكن أن يكون مكلفًا للغاية.أعلم أنه في محرك MySQL's InnoDB، يمكن أن يستغرق التراجع عن معاملة كبيرة وقتًا أطول بكثير من تنفيذها (لقد رأينا أن التراجع يستغرق 30 دقيقة).

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

نصائح أخرى

يمكنك الحصول على حالة توقف تام حتى بدون استخدام المعاملات الصريحة.لسبب واحد، ستطبق معظم قواعد البيانات العلائقية معاملة ضمنية على كل عبارة تقوم بتنفيذها.

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

إحدى المشكلات المتعلقة بالمعاملات هي أنه من الممكن (غير محتمل، ولكنه ممكن) حدوث حالة توقف تام في قاعدة البيانات.يجب عليك أن تفهم كيفية عمل قاعدة البيانات الخاصة بك، والأقفال، والمعاملات، وما إلى ذلك من أجل تصحيح هذه المشاكل المثيرة للاهتمام/المحبطة.

-آدم

أعتقد أن المشكلة الرئيسية هي على مستوى التصميم.على أي مستوى أو مستويات في طلبي يمكنني استخدام المعاملات.

على سبيل المثال يمكنني:

  • إنشاء المعاملات ضمن الإجراءات المخزنة،
  • استخدم واجهة برمجة تطبيقات الوصول إلى البيانات (ADO.NET) للتحكم في المعاملات
  • استخدم شكلاً من أشكال التراجع الضمني في مستوى أعلى في التطبيق
  • معاملة موزعة في (عبر DTC / COM+).

غالبًا ما يؤدي استخدام أكثر من واحد من هذه المستويات في نفس التطبيق إلى إنشاء مشكلات في الأداء و/أو تكامل البيانات.

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