الإفراط في تخصيص الذاكرة هو تقنية تجريبية تهدف إلى إتاحة تعيين حدود ذاكرة أكثر مرونة للاستعلامات.
تتمثل فكرة هذه التقنية في تقديم إعدادات يمكنها التعبير عن مقدار الذاكرة المضمون الذي يمكن أن يستخدمه الاستعلام.
عند تمكين الإفراط في تخصيص الذاكرة وبلوغ حد الذاكرة، سيحدّد ClickHouse الاستعلام الأكثر إفراطًا في التخصيص ويحاول تحرير الذاكرة بإنهاء هذا الاستعلام.
عند بلوغ حد الذاكرة، سينتظر أي استعلام بعض الوقت أثناء محاولة تخصيص ذاكرة جديدة.
إذا انقضت المهلة وتم تحرير الذاكرة، يواصل الاستعلام التنفيذ.
وإلا فسيُطرح استثناء ويُنهى الاستعلام.
يُحدَّد الاستعلام الذي يجب إيقافه أو إنهاؤه بواسطة متتبّعات الإفراط في التخصيص العامة أو الخاصة بالمستخدم، وذلك بحسب حد الذاكرة الذي تم بلوغه.
إذا تعذّر على متتبّع الإفراط في التخصيص اختيار استعلام لإيقافه، فسيُطرح استثناء MEMORY_LIMIT_EXCEEDED.
متعقّب الإفراط في التخصيص للمستخدم
يعثر متعقّب الإفراط في التخصيص للمستخدم على الاستعلام ذي أعلى نسبة الإفراط في التخصيص في قائمة استعلامات المستخدم.
تُحتسب نسبة الإفراط في التخصيص للاستعلام بقسمة عدد البايتات المخصّصة على قيمة الإعداد memory_overcommit_ratio_denominator_for_user.
إذا كانت قيمة memory_overcommit_ratio_denominator_for_user لهذا الاستعلام تساوي صفرًا، فلن يختار متعقّب الإفراط في التخصيص هذا الاستعلام.
تُضبط مهلة الانتظار بواسطة الإعداد memory_usage_overcommit_max_wait_microseconds.
مثال
متعقّب الإفراط في التخصيص العام
يعثر متعقّب الإفراط في التخصيص العام على الاستعلام صاحب أعلى نسبة الإفراط في التخصيص ضمن قائمة جميع الاستعلامات.
في هذه الحالة، تُحتسب نسبة الإفراط في التخصيص بقسمة عدد البايتات المخصّصة على قيمة الإعداد memory_overcommit_ratio_denominator.
إذا كانت قيمة memory_overcommit_ratio_denominator للاستعلام تساوي صفرًا، فلن يختار متعقّب الإفراط في التخصيص هذا الاستعلام.
تُحدَّد مهلة الانتظار بواسطة المعلَمة memory_usage_overcommit_max_wait_microseconds في ملف الإعدادات. آخر تعديل في ٢٣ يوليو ٢٠٢٦