Skip to main content
تضبط هذه الإعدادات خادم ClickHouse، وهي مُولَّدة تلقائيًا من الشفرة المصدرية لـ ClickHouse.

memory_worker_correct_memory_tracker

يحدد ما إذا كان عامل الذاكرة في الخلفية يصحّح متعقّب الذاكرة العام عند كل tick، استنادًا إلى قياس خارجي للذاكرة التي تستخدمها العملية فعليًا: استخدام الذاكرة في cgroup عندما تكون cgroups متاحة (راجع memory_worker_use_cgroup)، وإلا فقيمة stats.resident من jemalloc. متعقّب الذاكرة العام عدّادٌ تزيده عمليات التخصيص وتُنقصه عمليات التحرير. وأي خلل في هذا الحساب يظل عالقًا فيه طوال عمر العملية، إذ لا شيء آخر يُخفّضه، ولا يُستدرَك أي انحراف تصاعدي أبدًا، لأن الذاكرة التي يمثّلها قد حُرِّرت أصلًا. وما إن يتجاوز الانحراف وحده max_server_memory_usage حتى تفشل كل عمليات التخصيص، بما في ذلك الفحص بحجم صفر بايت في بداية الاتصال، فيرفض الخادم جميع الاستعلامات مع أنه لا يستخدم سوى جزء من حدّه. أما التصحيح استنادًا إلى القياس فيحصر عمر هذا الانحراف في tick واحدة من tickات العامل (memory_worker_period_ms، وقيمتها الافتراضية 50 مللي ثانية عند القراءة من cgroups و100 مللي ثانية عند القراءة من jemalloc). ولا يُخفي التصحيحُ الانحرافَ؛ إذ يحتفظ MemoryTrackingUncorrected بالقيمة التي كان المتعقّب سيبلغها لو لم يُطبَّق أي تصحيح (وهي لقطة من العدّاد الخام تُحدَّث عند كل tick من tickات العامل)، ومن ثَمّ يمثّل MemoryTrackingUncorrected - MemoryTracking الانحراف المتراكم حتى الآن. يؤدي ضبط هذا الإعداد على 0 إلى استعادة سلوك الإصدارات السابقة، حيث لا يُصحَّح المتعقّب إلا عند tick الأولى للعامل وكلما أصبحت قيمته سالبة.

memory_worker_decay_adjustment_period_ms

المدة، بالميلي ثانية، التي يجب أن تستمر خلالها حالة ضغط الذاكرة قبل إجراء ضبط ديناميكي للقيمة dirty_decay_ms في jemalloc. عندما يظل استخدام الذاكرة أعلى من عتبة التطهير طوال هذه المدة، يُعطَّل تلقائيًا اضمحلال الصفحات المتسخة (dirty_decay_ms=0) لاسترداد الذاكرة بشكل مكثف. وعندما يظل الاستخدام دون العتبة طوال هذه المدة، يُستعاد سلوك الاضمحلال الافتراضي. اضبطها على 0 لتعطيل الضبط الديناميكي واستخدام إعدادات الاضمحلال الافتراضية في jemalloc.

memory_worker_dynamic_hard_limit

ما إذا كان عامل الذاكرة في الخلفية يعيد دوريًا حساب الحدّ الصارم لذاكرة الخادم أثناء وقت التشغيل وفقًا للصيغة (resident memory + system available memory) * max_server_memory_usage_to_ram_ratio، بحيث يترك الخادم هامشًا احتياطيًا للعمليات الأخرى التي تعمل على المضيف نفسه. عند تعطيله، يقتصر max_server_memory_usage_to_ram_ratio على تقييد الحدّ الصارم للذاكرة بصورة ثابتة فقط، عند بدء التشغيل وعند إعادة تحميل الإعدادات، كما في الإصدارات السابقة. لا يكون له أي تأثير عندما تكون قيمة max_server_memory_usage_to_ram_ratio هي 0.

memory_worker_period_ms

فترة tick الخاصة بعامل الذاكرة في الخلفية، والذي يصحّح استهلاك الذاكرة الذي يسجّله متعقّب الذاكرة وينظّف الصفحات غير المستخدمة عند ارتفاع استهلاك الذاكرة. إذا ضُبطت على 0، فستُستخدم القيمة الافتراضية وفقًا لمصدر استهلاك الذاكرة

memory_worker_purge_dirty_pages_threshold_ratio

نسبة العتبة لصفحات jemalloc المتسخة مقارنةً بالذاكرة المتاحة لخادم ClickHouse. عندما يتجاوز حجم الصفحات المتسخة هذه النسبة، يقوم عامل الذاكرة في الخلفية بتطهير الصفحات المتسخة قسرًا. إذا ضُبطت على 0، فسيتم تعطيل التطهير القسري المستند إلى نسبة الصفحات المتسخة.

memory_worker_purge_total_memory_threshold_ratio

نسبة العتبة لتطهير jemalloc مقارنةً بالذاكرة المتاحة لخادم ClickHouse. عندما يتجاوز إجمالي استخدام الذاكرة هذه النسبة، يفرض عامل الذاكرة في الخلفية تطهير الصفحات المتسخة. وإذا ضُبطت على 0، يتم تعطيل التطهير القسري المستند إلى إجمالي الذاكرة.

memory_worker_rss_speculative_reserve_ratio

عند كل tick لـ MemoryWorker، احجز مقدارًا إضافيًا قدره ratio * min(resident - previous_resident, resident - tracked) فوق قيمة RSS المرصودة، على افتراض أن الـ tick التالية قد تزداد بالمقدار نفسه الذي زادت به السابقة (resident - previous_resident هو مقدار زيادة RSS خلال الـ tick السابقة). ويُحدَّد هذا النمو بالقيمة resident - tracked، وهي الجزء من RSS غير المرئي لـ متعقّب الذاكرة العام، لأن النمو الذي جرى تتبعه بالفعل تتعامل معه آلية التحقق العادية من الحد الصارم. ويُطبَّق هذا الحجز على عدّاد rss الذي ترجع إليه آلية التحقق العامة من الحد الصارم عبر MemoryTracker::allocImpl، لذا عندما تتجاوز القيمة المستقرأة max_server_memory_usage، فإن عمليات التخصيص اللاحقة تُطلق MEMORY_LIMIT_EXCEEDED قبل أن يتدخل OOM-killer في النواة. تؤدي القيمة 0 إلى تعطيل هذا الاستقراء (مع الرجوع إلى rss = resident)؛ أما القيمة الافتراضية 1 فتحجز دلتا نمو كاملة كهامش سعة إضافي للفاصل الزمني التالي. وعند استخدام أدوات التنقية (ASan وUBSan وMSan وTSan)، تكون القيمة الافتراضية 0، لأن الفجوة resident - tracked يغلب عليها الحمل الإضافي الناتج عن ذاكرة الظل / بيئة التشغيل الخاصة بأدوات التنقية، لا تأخر تسجيل الحسابات في المتتبّع.

memory_worker_use_cgroup

استخدم معلومات استخدام الذاكرة الحالية في cgroup لتصحيح تتبع الذاكرة.
آخر تعديل في ٢٣ يوليو ٢٠٢٦