نشر في الأصل في 2/27/2012 على مدونة مطور Valence بواسطة Craig Dunk.
أحب جمع الأخطاء (كما هو الحال في عيوب البرامج) أو على الأقل قصص حول تتبع الأخطاء. مع الأخطاء ، تكون مفضلاتي دائما دقيقة ويصعب إعادة إنتاجها ولكنها تنطوي على تغيير سطر واحد (نتيجة لذلك لدي الكثير من قصص الأخطاء المتعلقة بالخيوط).
قضيت هذا الأسبوع عددا من الساعات في تعقب عيب مثير للاهتمام. في الأساس ، كان لدينا بعض استدعاءات واجهة برمجة التطبيقات الجديدة التي فشلت تلقائيا في بيئة ضمان الجودة الخاصة بنا. بعد التسجيل والبحث ، حددت بعض الاستثناءات التي تم طرحها بشكل دوري وتتوافق تقريبا مع الأوقات التي فشلت فيها مكالمات الويب. وشملت هذه المسائل ما يلي:
System.Data.SqlClient.SqlException: تم إيقاف المعاملة (معرف العملية 123) على موارد التأمين مع عملية أخرى وتم اختيارها كضحية توقف تام. أعد تشغيل المعاملة. في System.Data.SqlClient.SqlConnection.OnError(استثناء SqlException، breakConnection منطقي)
لحسن الحظ ، لدينا مطور قاعدة بيانات رائع (وحائز على جوائز!) في فريق قريب. لقد خطط لإعداد آثار MSSql معي ، لكنه كان قادرا بالفعل على تحديد الرصاصة الفضية عن طريق الفحص وبناء على تلك الرسالة تمكن من تحديد إجراء مخزن وأعطاني درسا في التزامن.
يكتب:
التزامن هو نوع من من الصعب الحصول عليها بشكل صحيح في هذه الحالة.
أعتقد أننا نريد
حدد @id = TableId
من اسم الجدول مع (HOLDLOCK)
مفتاح WHERE = @myKey
بدلاً من
حدد @id = TableId
من اسم الجدول
مفتاح WHERE = @myKey
هذا يجعل قصة خطأ رائعة لجمعها لأنها كانت في الحقيقة تغييرا في سطر واحد واستغرقت بعض الوقت (بالنسبة لي) لتحديد موقعها ، بالإضافة إلى أن لدي الآن موردا مفيدا حقا في شكل مايكل Mythbuster Post. ما يعجبني في المنشور (إلى جانب موضوع Mythbuster) هو أنه منهجي وشامل ويمنحك الأدوات اللازمة لإعادة الإنتاج و "تجربة هذا في المنزل". لذلك إذا وصلت إلى هذه الصفحة لأنك أيضا تقوم بتصحيح أخطاء استثناء الجمود ، فستحتاج إلى التحقق من المنشور أعلاه.