برمجياتقراءة دقيقتين

مهندس في Pivot يسرّع استعلام GROUP BY بزيادة عمل المعالج، لأن نصف وقته كان انتظارًا للذاكرة

نشر Maor Kern يوم 28 أكتوبر 2026 مقالًا على مدونة Pivot يشرح كيف جعل استعلامًا أسرع بأن جعل المعالج يؤدي عملًا أكثر لا أقل. فقد زاد عدد العمليات المنفذة من 11,431,618,219 إلى 19,350,459,182، بينما نزل الوقت من نحو 4.03 ثوانٍ إلى نحو 3.01 ثانية.

والتفسير في أرقام سلّم الذاكرة. فالمعالج الحديث ينفذ نحو 4 إلى 8 أوامر في النانو ثانية، بينما يستغرق الوصول إلى الـ DRAM نحو 50 إلى 100 نانو ثانية. أي أن قراءة واحدة من الذاكرة الرئيسية تعادل وقت 400 إلى 800 أمر. وبين الطرفين طبقات الـ cache: ذاكرة L1 بنحو 1 نانو ثانية، وL2 بنحو 3 إلى 4، وL3 بنحو 10 إلى 15.

كانت التجربة استعلام count مع GROUP BY على عمود UserID من مجموعة hits في ClickBench: 99 مليون صف، فيها نحو 17 مليون قيمة مختلفة، على نواة واحدة من معالج AMD EPYC 9124 بـ 16 نواة و128 جيجا DDR5. ومع هذا العدد من القيم، صار جدول التجميع أكبر بكثير من الـ cache، فذهبت كل قراءة تقريبًا إلى الـ RAM. وأظهر القياس أن 50% من وقت المعالج كان انتظارًا للذاكرة، رغم أن نسبة استخدامه تظهر 100%.

وكان الحل على مرحلتين. الأولى توزّع المفاتيح على 4096 جزءًا باستخدام أعلى 12 بت من الـ hash. والثانية تمر على الأجزاء واحدًا واحدًا، وتجمع كل جزء في جدول صغير يبقى داخل الـ cache. والتقسيم عمل إضافي، ولهذا زادت العمليات. لكن الانتظار انخفض من 50% إلى 23.5%، ونزلت الخانات المتوقفة بسبب الذاكرة من 8,364,109,137 إلى 3,790,955,223، فجاءت النتيجة أسرع.

والفكرة تتجاوز قواعد البيانات. فكل فريق يحكم على أداء خدمته بنسبة استخدام المعالج وحدها قد يقرأ الانتظار على أنه عمل. والتحسين الذي يبدو أنه يضيف عملًا قد يكون هو الأسرع، حين يكون عنق الزجاجة الوصول إلى البيانات لا حسابها.

المصادر

  1. مقال It's the memory latency, stupid على مدونة Pivot

من عدد الأحد 21 جمادى الأولى - 1 نوفمبر

أخبار ذات صلة

برمجيات

ClickHouse تحذف محرّك pgrust من ClickBench بعد قياس هبط من 10.8 ثانية إلى 11 ميلي ثانية، وصاحبه يرد

المغزى: الرقم الذي يتحسّن ألف مرة في التشغيلة الثانية يقيس الكاش لا سرعة قاعدة البيانات، وسؤالان يفرزان أي benchmark: هل قيس باردًا، وهل يبقى كما هو إذا تغيّرت قيمة داخل الاستعلام.

13 جمادى الأولى - 24 أكتوبر

أخبار الأحد 21 جمادى الأولى - 1 نوفمبر