هذا المنشور هو الجزء الثالث من السلسلة على مشغلي الصلة (تأكد من قراءة الصلات المتداخلة للجزء 1 ، والجزء 2 - دمج الصلات ). تم إعداد ترجمة المقال خصيصًا لطلاب الدورة التدريبية "MS SQL Server Developer" .

وصلات تجزئة التطابق هي أوراق عمل موثوقة لمشغلي الاتصال الفعلي.
بينما ستفشل عملية الانضمام إلى الحلقات المتداخلة إذا كان هناك الكثير من البيانات لتناسب الذاكرة ، وسيتطلب دمج الانضمام أن يتم فرز المدخلات ، فإن Hash Match ستربط أي بيانات ترسلها (شريطة أن يتم تنفيذ مسند المساواة من أجل الاتصال ، وهناك حتى الآن مساحة حرة كافية في tempdb الخاص بك).
شاهد مقاطع فيديو متعلقة بـ YouTube
تتكون خوارزمية تطابق التجزئة من مرحلتين تعملان على النحو التالي:

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

يحدث هذا عندما يكون هناك بيانات أكثر مما يمكن تخزينه في الذاكرة ، أو عندما يوفر SQL Server ذاكرة غير كافية لاتصال تطابق التجزئة .
عندما لا يكون لدى SQL Server ذاكرة كافية لتخزين جدول التجزئة أثناء مرحلة الإنشاء ، فإنه يستمر في العمل وتخزين بعض الكتل في الذاكرة ووضع كتل أخرى في tempdb.
في مرحلة التحقق من الصحة ، ينضم SQL Server إلى صفوف البيانات من الجدول الثاني في كتل من مرحلة الإنشاء في الذاكرة. إذا كانت الكتلة التي يحتمل أن يقابلها هذا الخط قد نفدت في الوقت الحالي ، يكتب SQL Server هذا الخط إلى tempdb للمقارنة لاحقًا.
عند اكتمال التطابقات لكتلة واحدة ، يقوم SQL Server بمسح هذه البيانات من الذاكرة ويقوم بتحميل الكتل التالية في الذاكرة. ثم يقارن صفوف الجدول الثاني (الموجود حاليًا في tempdb) مع الكتل الجديدة في الذاكرة.
كما هو الحال مع كل بيان الصلة المادية في هذه السلسلة ، يمكن العثور على تفاصيل بيان مطابقة التجزئة في مساعدة Hugo Kornelis على مطابقة التجزئة .
ماذا تظهر لعبة Hash Match Join؟
تتيح لنا معرفة الميزات الداخلية لكيفية عمل صلة تطابق التجزئة ، تحديد ما يفكر به المُحسِّن بشأن بياناتنا ومشغلي الاتصالات الأولية ، مما يساعدنا على التركيز على ضبط الأداء.
فيما يلي بعض السيناريوهات التي يجب مراعاتها في المرة التالية التي ترى فيها صلة ربط التجزئة مستخدمة في خطة التنفيذ الخاصة بك:
- على الرغم من أن خاصية ربط التجزئة يمكن أن تجمع بين مجموعات البيانات الضخمة ، إلا أن إنشاء جدول تجزئة من جدول الإدخال الأول هو عملية حظر تمنع تنفيذ البيانات اللاحقة. في هذا الصدد ، أتحقق دائمًا من وجود طريقة سهلة لتحويل مطابقة التجزئة إلى حلقات متداخلة أو دمج الصلة. في بعض الأحيان لا يكون ذلك ممكنًا (هناك العديد من الصفوف للحلقات المتداخلة أو البيانات غير المصنفة لربط الدمج) ، ولكن من الجدير دائمًا التحقق ما إذا كان تغيير الفهرس البسيط أو التقديرات المحسنة سينتج عن تحديث الإحصائيات إلى حقيقة أن SQL Server تحدد عبارة ربط مطابقة تجزئة غير محظورة
- تعد وصلات تجزئة التطابق كبيرة بالنسبة للاتصالات الكبيرة ، حيث يمكن نقلها إلى tempdb ، مما يتيح لهم إجراء اتصالات بمجموعات البيانات الكبيرة ، مما قد يؤدي إلى فشل الاتصال في الذاكرة باستخدام حلقات متداخلة أو دمج عبارات الصلة.
- إذا رأيت بيان الصلة بتطابق التجزئة ، فهذا يعني أن SQL Server يعتقد أن الإدخال كبير جدًا. إذا علمنا أن بيانات المدخلات الخاصة بنا لا ينبغي أن تكون كبيرة جدًا ، فمن المفيد التحقق مما إذا كانت هناك مشكلات تتعلق بالإحصائيات أو التقدير ، وذلك بسبب قيام SQL Server بتحديد صلة تطابق التجزئة بشكل غير صحيح.
- عند تنفيذه في الذاكرة ، يكون رابط مطابقة التجزئة فعالًا جدًا. تنشأ المشاكل عند انتقال مرحلة الإنشاء إلى tempdb.
- إذا لاحظت وجود مثلث أصفر صغير يشير إلى أن الاتصال يذهب إلى tempdb ، فأرى لماذا حدث هذا: إذا كان هناك بيانات أكثر من الذاكرة المتوفرة ، فهناك القليل الذي يمكن القيام به ، ولكن إذا كانت الذاكرة المخصصة صغيرة بشكل غير معقول ، فقد يعني ذلك ربما لدينا مشكلة واحدة أخرى مع الإحصائيات التي تؤدي إلى تقديرات منخفضة للغاية لمحسن SQL Server.
شكرا لقراءة المقال. قد ترغب أيضا بلدي التغريد .
غطينا هذا الموضوع في درس مفتوح سابق. في انتظار تعليقاتكم!