محتويات الدورة

SQL Server / المتقدم / الدرس 14

التعارضات الدائرية والانتظار وأدلة الحوادث

ميّز دورة الاعتماد من الانتظار العادي وانتهاء المهلة، وفسّر دليل التعارض وحدد جذوره وصمّم إعادة محاولات معاملات محدودة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمييز 1205 و1222 من مهلة العميل.
  • قراءة علاقات الملكية والانتظار في رسم التعارض.
  • إعادة معاملة عمل مؤهلة كاملة فقط.

صنّف الفشل قبل إصلاحه

يقع الحجب عندما تنتظر مهمة مورداً غير متوافق تمسكه أخرى. يتطلب التعارض الدائري دورة: تحتاج A شيئاً تمسكه B وتحتاج B مباشرة أو عبر غيرها شيئاً تمسكه A. يكتشف SQL Server الدورة ويختار ضحية ويتراجع عن معاملتها ويعيد 1205. قد ينتهي الحجب العادي طبيعياً بتثبيت مالكه.

يعني 1222 انتهاء مهلة طلب قفل وفق LOCK_TIMEOUT للجلسة. ومهلة أمر المشغل حد مختلف قد يلغي العمل دون إثبات تنظيف المعاملة. تحتاج هذه الإخفاقات معالجة مختلفة. سجل الرقم والوقت ومعرف العملية ونتيجة المعاملة بدلاً من اعتبار كل استعلام بطيء تعارضاً دائرياً.

تتبع دورة بموردين

تخيل تحويلين يمسان الحسابين 1 و2. تحدث A الحساب 1 أولاً وتحدث B الحساب 2. إذا طلبت كل منهما الحساب الآخر مع احتفاظها بالأول فقد تنشأ دورة. يعرض المقطع التصوري ترتيب A فقط وتعكسه B. لا تشغل العرض على خدمة قائمة.

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

sql توضيح ترتيب الوصول
-- Conceptual session A only; requires isolated lab setup.
BEGIN TRANSACTION;
UPDATE dbo.TrainingAccount SET Balance=Balance-10 WHERE AccountId=1;
UPDATE dbo.TrainingAccount SET Balance=Balance+10 WHERE AccountId=2;
ROLLBACK TRANSACTION;
-- Session B taking 2 then 1 can create an opposite dependency.

لا نفترض الضحية أو الزمن؛ يعتمد وقوع التعارض على التداخل المضبوط ومسارات الوصول.

اقرأ الأدلة القائمة دون تغييرات واسعة

تلتقط جلسة Extended Events المسماة system_health عادة أحداث xml_deadlock_report. يستطيع المسؤول فحص الرسوم الموجودة بصلاحيات مناسبة؛ لكن الاحتفاظ محدود، فلا يثبت غياب الرسم غياب التعارض. احفظ الرسم الأصلي ومعرفات الاستعلام اللازمة مع تقييد الوصول إلى النص والقيم الحساسة.

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

sql قراءة اعتماد الطلبات الحالية
SELECT session_id,blocking_session_id,status,wait_type,
 wait_time,wait_resource,open_transaction_count
FROM sys.dm_exec_requests
WHERE session_id<>@@SPID
ORDER BY blocking_session_id,session_id;

تتغير الصفوف باستمرار وقد تحتاج صلاحيات حالة الخادم؛ وتختلف متطلبات عدة عروض أداء في SQL Server 2022 فراجع التوثيق.

أعد العملية المؤهلة كاملة

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

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

تحقق من انخفاض الدورات والتنظيف

أعد التداخل المعني في بيئة مؤقتة ثم قارن معدل التعارض والتأخر بتزامن ممثل. تحقق من نظافة حالة المعاملة بعد المهلة والإلغاء وكذلك 1205. لا تزيل زيادة المهلة دورة اعتماد، ويؤثر DEADLOCK_PRIORITY في اختيار الضحية لا علاج السبب.

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

الأخطاء الشائعة وإصلاحها

Transaction was deadlocked and chosen as victim.

لماذا يحدث؟
استدعت دورة اعتماد التراجع عن ضحية.
كيف تصلحه؟
افحص الرسم وأعد المعاملة المؤهلة كاملة بحدود.
كيف تتجنب تكراره؟
وحّد ترتيب الوصول وقصّر المعاملات.

Lock request time out period exceeded.

لماذا يحدث؟
انتهت LOCK_TIMEOUT أثناء الانتظار.
كيف تصلحه؟
افحص الحاجب ونظّف المعاملة وفق حالتها.
كيف تتجنب تكراره؟
صرّح بسياسة المهلة والتنظيف.

Retry duplicated an external effect.

لماذا يحدث؟
تراجع عمل القاعدة فقط وبقي الفعل الخارجي.
كيف تصلحه؟
استخدم هوية عملية دائمة ونسق الآثار الخارجية.
كيف تتجنب تكراره؟
اختبر الإعادة عند الحدود الخارجية.

اختبر فهمك

1. تنتظر A الجلسة B القادرة على المتابعة والتثبيت. هل هذا تعارض دائري؟

اعرض الحل المشروح

لم تظهر دورة؛ إنه حجب عادي. حدد سبب بطء B أو استمرار معاملتها، ولا تستنتج دورة من طول الانتظار وحده.

2. وقع 1205 بعد الخصم وأثناء الإضافة. ماذا يعاد؟

اعرض الحل المشروح

أعد معاملة التحويل المؤهلة كاملة بما فيها الخصم لأن تراجع الضحية ألغى المعاملة. حد المحاولات وتأكد من عدم تكرار الإشعار أو الدفع.

أهم ما تعلمته

  • التعارض الدائري دورة لا انتظار طويل.
  • يحدد تصنيف الخطأ التنظيف والإعادة.
  • يجب ربط رسم التعارض بحدود معاملة العمل.

المراجع الرسمية