سؤال

هناك استفسار:

SELECT entry_id FROM table_name 
WHERE (path_id = 7 AND value_string =  N'00020003-0004-0005-0006-000700080009' )

يحتوي الجدول الموجود في هذا الاستعلام على ملايين السجلات.كلاهما path_id و value_string لها فهارسها غير المجمعة.

عندما أستخدم SQL Server Profiler لتتبع هذا الاستعلام باستخدام Lock:Acquired في هذا الحدث، أرى أن هناك ثلاثة أقفال لصفحات IS تم أخذها:واحد على الصفحة التي تحتوي على هذا value_string كـ "00020003-0004-0005-0006-000700080009"، واحد على صفحة تحتوي على path_id مثل 6 (وهو مذهل)، وواحد على صفحة تحتوي على path_id مثل 7 (وهو المتوقع).

طريقة الحصول على معلومات حول الصفحات:في Lock:Acquired هناك حقل TextData تحتوي على نص مثل 1:87032;أنا آخذ هذا وأنفذه

DBCC PAGE ('mc33', 1, 87032, 3) 

ثم أحصل على الإخراج مثل هذا:

table output with page information

السؤال هو:لماذا يضع المحرك قفل IS على صفحة تحتوي على الستات فقط، إذا كان الاستعلام مهتمًا فقط بالسبعات؟يؤدي هذا القفل "المفرط" إلى طريق مسدود عندما يتم تنفيذ هذا الاستعلام بالتوازي مع إدخالات معينة، وأود أن أعرف كيف يمكنني التخلص من هذا القفل.

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

المحلول

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

إذا كنت تشتكي من حالة الجمود، أقترح عليك التحقيق فيها وفقًا لذلك، بدءًا من الرسم البياني للحالة المسدودة.

كملاحظة جانبية، القفل المفرط (عندما يكون ملف هَم) يمكن تخفيفها باستخدام مستويات العزل المستندة إلى إصدار الصف.إذا كنت مهتمًا بتفاصيل منخفضة المستوى حول كيفية عمل B-Tree فعليًا، فابدأ بذلك معالجة المعاملات:المفاهيم والتقنيات

للتفصيل قليلا:ستحتوي الصفحة الداخلية على مفتاح ومؤشر للصفحة/الفتحة.وهذا يعني أن "الصفحة التي تبدأ عند المؤشر تحتوي على قيم". الأصغر من هذه القيمة الرئيسية ".سيبحث البحث في الصفحة العلوية حتى يجد المفتاح الأول أكبر من القيمة التي يتم البحث عنها.فإنه يقفز إلى المؤشر ويستمر من هناك، بشكل متكرر.إذا كانت الصفحة العلوية تقول "من الصفحة 148، جميع المفاتيح أصغر من 8" وكانت الصفحة 148 تحتوي على 6es، فسيؤدي البحث إلى قفل الصفحة باستخدام 6es.لا يوجد غبار سحري هنا.يعد قفل الكثير من 6es بمثابة إشارة واضحة إلى أن المفتاح لديه انتقائية منخفضة جدًا:هناك العديد من الصفوف التي تكرر نطاقًا صغيرًا من القيم الأساسية.

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