الاثنين، 8 أكتوبر 2018

الدرس السابع عشر عبارة SELECT مع NOLOCK

عبارة NOLOCK يمكن استخدامها مع عبارة SELECT  وذلك لتسريع تنفيذ الايعازات. هناك جدل كبير حول فوائد استخدام عبارة NOLOCK واذا قمت ببحث في الجوجل سوف تجد عشرات المواضيع المتعلقة بهذه المسئلة. في البداية كنت ممن يعارضون استخدام هذا HINT ولكن الحاجة في بعض الاحيان تدفع المبرمج الى اختبار الاشياء بشكل عملي. عند التعامل مع قواعد البيانات الكبيرة والتي تمتلك الملايين من سطور البيانات تصبح عملية تحسين أداء قاعدة البيانات أمر ضروري. ذكرنا سابقا لتحسين  أداء قاعدة البيانات يمكن استخدام الفهارس indexs ولكن في بعض الأحيان استخدام الفهارس يكون غير كافي لذا يضطر مبرمج قواعد البيانات  إلى البحث عن خيارات أخرى لتحسين الأداء ومنها عبارة NOLOCK. ببساطة عند ذكر هذه العبارة بعد اسم الجدول وكما يلي 

SELECT * FROM Person.person NOLOCK 

فأن نظام إدارة قواعد البيانات سوف يقوم بأسترجاع البيانات من الجدول دون الحاجة للانتظار لأكمال العمليات الأخرى التي تجري على الجدول مثل عمليات إضافة INSERT البيانات وعملية تحديث البيانات UPDATE وعملية حذف البياناتDELETE. 
مثلا أثناء تنفيذ استعلام على الجدول قد يكون هناك شخص آخر قد بدء بتنفيذ استعلام تعديل UPDATE على احد السطور هنا اذا لم نستخدم عبارة NOLOCK فإن نظام إدارة قواعد البيانات سوف ينتظر هذا الشخص لكي يكمل عملية التحديث ثم ينفذ عملية اختيار البيانات SELECT. أما إذا استخدمنا عبارةNOLOCK فإن نظام إدارة قواعد البيانات سوف لا ينتظر أكمل عملية التحديث بل يقوم بأسترجاع البيانات من الجدول كما هي وهنا يوجد احتمالان الأول ان عملية التحديث قد تمت بسرعة وبلتالي سوف تحصل على البيانات المحدثة او تكون عملية التحديث بطيئة وسوف تحصل على بيانات هذا السطر قبل التحديث. حسب خبرتي العملية وكذلك بلنقاش مع بعض المختصين من مايكروسوفت في معظم الأحيان سوف تستعيد البيانات المحدثة ونسبة عالية حتى مع استخدام عبارة NOLOCK . لذا يعتبر هذا خيار جيد اذا كنت تعاني من مشاكل بطىء في تنفيذ احد الاستعلامات وحتى بعدما اضفت الفهارس indexs.

للتنبيه عند استخدام الأسماء المختصرة الجداول (راجع الدرس السابق) يجب كتابة عبارة NOLOCK  بشكل خاص وبين قوسين وتكون قبل الاسم المختصر وكما يلي
 SELECT * FROM Person. PERSON  NOLOCK)  PRSN)

ليست هناك تعليقات:

إرسال تعليق