الانتقال إلى المحتوى الرئيسي
لا تسري هذه الصفحة على ClickHouse Cloud. ويُنفَّذ الإجراء الموضَّح هنا تلقائيًا في خدمات ClickHouse Cloud.

متحكّم تحجيم CPU

استخدم دائمًا متحكّم التحجيم performance. إذ يعمل متحكّم التحجيم on-demand بكفاءة أقل بكثير عند وجود طلب مرتفع ومستمر.

قيود CPU

قد ترتفع حرارة المعالجات. استخدم dmesg لمعرفة ما إذا كان تردد CPU قد قُيِّد بسبب ارتفاع الحرارة. يمكن أيضًا فرض هذا القيد خارجيًا على مستوى مركز البيانات. يمكنك استخدام turbostat لمراقبته أثناء التعرّض لحمل.

RAM

بالنسبة إلى أحجام البيانات الصغيرة (حتى نحو 200 جيجابايت مضغوطة)، فمن الأفضل استخدام ذاكرة بحجم يقترب قدر الإمكان من حجم البيانات. أما عند التعامل مع أحجام بيانات كبيرة ومعالجة الاستعلامات التفاعلية (عبر الإنترنت)، فينبغي استخدام مقدار مناسب من RAM (128 جيجابايت أو أكثر) بحيث يمكن أن تستوعب ذاكرة التخزين المؤقت للصفحات المجموعة الفرعية النشطة من البيانات. حتى عند أحجام بيانات تبلغ نحو 50 تيرابايت لكل خادم، فإن استخدام 128 جيجابايت من RAM يحسّن أداء الاستعلامات بشكل ملحوظ مقارنةً بـ 64 جيجابايت. لا تعطّل overcommit. يجب أن تكون قيمة cat /proc/sys/vm/overcommit_memory هي 0 أو 1. نفّذ
استخدم perf top لمراقبة الوقت المُستغرَق في النواة لإدارة الذاكرة. كما أن الصفحات الضخمة الدائمة لا تحتاج أيضًا إلى تخصيص.

استخدام أقل من 16GB من RAM

الكمية الموصى بها من RAM هي 32 GB أو أكثر. إذا كان نظامك يحتوي على أقل من 16 GB من RAM، فقد تواجه استثناءات متنوعة متعلقة بالذاكرة لأن الإعدادات الافتراضية لا تتوافق مع هذا القدر من الذاكرة. يمكنك استخدام ClickHouse على نظام بذاكرة RAM قليلة (حتى 2 GB)، لكن هذه الإعدادات تتطلب ضبطًا إضافيًا ولا يمكنها إلا إدخال البيانات بمعدل منخفض. عند استخدام ClickHouse مع أقل من 16GB من RAM، نوصي بما يلي:
  • خفّض حجم mark cache في config.xml. يمكن ضبطه حتى 500 MB، لكن لا يمكن ضبطه على الصفر.
  • خفّض عدد خيوط معالجة الاستعلامات إلى 1.
  • خفّض max_block_size إلى 8192. ويمكن أن تظل القيم المنخفضة حتى 1024 عملية.
  • خفّض max_download_threads إلى 1.
  • اضبط input_format_parallel_parsing وoutput_format_parallel_formatting على 0.
  • عطّل الكتابة في جداول السجل، لأن ذلك يُبقي مهمة الدمج في الخلفية محتجزةً لذاكرة RAM لتنفيذ عمليات دمج جداول السجل. عطّل asynchronous_metric_log وmetric_log وtext_log وtrace_log.
ملاحظات إضافية:
  • لتحرير الذاكرة المخزنة مؤقتًا بواسطة مُخصِّص الذاكرة، يمكنك تشغيل الأمر SYSTEM JEMALLOC PURGE .
  • لا نوصي باستخدام تكاملات S3 أو Kafka على الأجهزة ذات الذاكرة المنخفضة لأنها تتطلب قدرًا كبيرًا من الذاكرة للمخازن المؤقتة.

النظام الفرعي للتخزين

إذا كانت ميزانيتك تسمح باستخدام أقراص SSD، فاستخدمها. وإن لم تسمح بذلك، فاستخدم أقراص HDD. وستفي أقراص SATA HDD بسرعة 7200 دورة في الدقيقة بالغرض. أعطِ الأفضلية لعدد أكبر من الخوادم ذات الأقراص الصلبة المحلية بدلاً من عدد أقل من الخوادم المزودة بأرفف أقراص متصلة. لكن لتخزين الأرشيفات التي تُجرى عليها استعلامات نادرة، فإن أرفف الأقراص تكون مناسبة.

RAID

عند استخدام HDD، يمكنك ضمّها في RAID-10 أو RAID-5 أو RAID-6 أو RAID-50. في Linux، يكون RAID البرمجي أفضل (باستخدام mdadm). عند إنشاء RAID-10، اختر تخطيط far. إذا كانت ميزانيتك تسمح، فاختر RAID-10. يُعدّ LVM بحد ذاته (من دون RAID أو mdadm) خيارًا مقبولًا، لكن إنشاء RAID باستخدامه أو دمجه مع mdadm خيار أقل شيوعًا، وتزداد معه احتمالات وقوع أخطاء (مثل اختيار حجم chunk غير صحيح؛ أو عدم محاذاة chunks؛ أو اختيار نوع RAID غير صحيح؛ أو نسيان تنظيف الأقراص). إذا كنت واثقًا من استخدام LVM، فلا مانع من استخدامه. إذا كان لديك أكثر من 4 أقراص، فاستخدم RAID-6 (وهو الخيار المفضّل) أو RAID-50 بدلًا من RAID-5. عند استخدام RAID-5 أو RAID-6 أو RAID-50، احرص دائمًا على زيادة stripe_cache_size، لأن القيمة الافتراضية غالبًا لا تكون الخيار الأفضل.
احسب القيمة الدقيقة انطلاقًا من عدد الأجهزة وحجم الكتلة، باستخدام الصيغة: 2 * num_devices * chunk_size_in_bytes / 4096. يُعد حجم الكتلة البالغ 64 KB كافيًا لمعظم إعدادات RAID. يبلغ متوسط حجم الكتابة في clickhouse-server نحو 1 MB ‏(1024 KB)، لذلك فإن حجم الشريط الموصى به هو أيضًا 1 MB. ويمكن تحسين حجم الكتلة عند الحاجة بضبطه على 1 MB مقسومًا على عدد أقراص عدم التكافؤ في مصفوفة RAID، بحيث تُوزَّع كل عملية كتابة بالتوازي على جميع أقراص عدم التكافؤ المتاحة. لا تضبط حجم الكتلة أبدًا على قيمة صغيرة جدًا أو كبيرة جدًا. يمكنك استخدام RAID-0 على SSD. وبغض النظر عن استخدام RAID، استخدم دائمًا النسخ المتماثل لضمان أمن البيانات. فعّل NCQ مع قائمة انتظار طويلة. بالنسبة إلى HDD، اختر المجدول mq-deadline أو CFQ، وبالنسبة إلى SSD، اختر noop. لا تقلّل إعداد ‘readahead’. بالنسبة إلى HDD، فعّل ذاكرة التخزين المؤقت للكتابة. تأكّد من أن fstrim مفعّل لأقراص NVME وSSD في نظام التشغيل لديك (وعادةً ما يُنفَّذ باستخدام مهمة cron أو خدمة systemd).

نظام الملفات

يُعد Ext4 الخيار الأكثر موثوقية. اضبط خيارات الربط noatime. كما أن XFS يعمل جيدًا أيضًا. وينبغي أن تعمل معظم أنظمة الملفات الأخرى دون مشكلة. لا يدعم FAT-32 وexFAT بسبب عدم دعم الروابط الصلبة. لا تستخدم أنظمة الملفات المضغوطة، لأن ClickHouse يتولى الضغط بنفسه وبشكل أفضل. كما لا يُنصح باستخدام أنظمة الملفات المشفرة، لأن بإمكانك استخدام التشفير المدمج في ClickHouse، وهو أفضل. ومع أن ClickHouse يمكنه العمل عبر NFS، فإن ذلك ليس الخيار الأفضل.

نواة Linux

لا تستخدم نواة Linux قديمةً.

الشبكة

إذا كنت تستخدم IPv6، فزِد حجم ذاكرة التخزين المؤقت للمسارات. كانت نواة Linux في الإصدارات السابقة لـ 3.2 تعاني عددًا كبيرًا من المشكلات في دعم IPv6. استخدم شبكة بسرعة 10 غيغابت على الأقل، إن أمكن. ستعمل سرعة 1 غيغابت أيضًا، لكنها ستكون أسوأ بكثير عند تصحيح النسخ المتماثلة التي تحتوي على عشرات التيرابايتات من البيانات، أو عند تنفيذ الاستعلامات الموزعة التي تتضمن كمية كبيرة من البيانات الوسيطة.

الصفحات الضخمة

اضبط transparent huge pages دائمًا على madvise. في الأنوية الأقدم (قبل الإصدار 5.9)، قد يؤدي ضبط THP على always إلى تراجع كبير في الأداء، إذ تقضي النواة وقتًا مفرطًا في إلغاء تجزئة الذاكرة، خاصةً على الأنظمة التي تحتوي على 64 غيغابايت أو أكثر من RAM. وقد قدّم الإصدار 5.9 من النواة آلية compaction استباقية تتعامل مع THP بكفاءة أفضل بكثير، لكن ClickHouse لا يزال يعرض تحذيرًا عند بدء التشغيل إذا كان THP مضبوطًا على always، لذا يظل madvise هو الإعداد الموصى به بغض النظر عن إصدار النواة.
إذا كنت تريد تعديل إعداد الصفحات الضخمة الشفافة بشكل دائم، فقم بتحرير ملف /etc/default/grub لإضافة transparent_hugepage=madvise إلى الخيار GRUB_CMDLINE_LINUX_DEFAULT:
بعد ذلك، نفّذ الأمر sudo update-grub ثم أعد التشغيل حتى تسري التغييرات.

إعدادات الهايبرفايزر

إذا كنت تستخدم OpenStack، فاضبط
في nova.conf. إذا كنت تستخدم libvirt، فعيّن
في إعدادات XML. هذا مهم لكي يتمكن ClickHouse من الحصول على المعلومات الصحيحة باستخدام التعليمة cpuid. وإلا فقد تواجه أعطال Illegal instruction عند تشغيل هايبرفايزر على طُرز CPU قديمة.

ClickHouse Keeper وZooKeeper

يُوصى باستخدام ClickHouse Keeper بديلاً عن ZooKeeper في مجموعات ClickHouse. راجع وثائق ClickHouse Keeper إذا كنت ترغب في الاستمرار في استخدام ZooKeeper، فمن الأفضل استخدام إصدار حديث منه — 3.4.9 أو أحدث. وقد يكون الإصدار المتوفر في توزيعات Linux المستقرة قديماً. يجب ألّا تستخدم أبداً برامج نصية مكتوبة يدوياً لنقل البيانات بين مجموعات ZooKeeper المختلفة، لأن النتيجة ستكون غير صحيحة بالنسبة إلى العُقد من النوع sequential. ولا تستخدم أبداً الأداة المساعدة “zkcopy” للسبب نفسه: https://github.com/ksprojects/zkcopy/issues/15 إذا كنت تريد تقسيم مجموعة ZooKeeper حالية إلى مجموعتين، فالطريقة الصحيحة هي زيادة عدد النسخ المتماثلة فيها ثم إعادة تهيئتها كمجموعتين مستقلتين. يمكنك تشغيل ClickHouse Keeper على الخادم نفسه مع ClickHouse في بيئات الاختبار، أو في البيئات ذات معدل إدخال البيانات المنخفض. أما في بيئات الإنتاج، فنقترح استخدام خوادم منفصلة لكل من ClickHouse وZooKeeper/Keeper، أو وضع ملفات ClickHouse وملفات Keeper على أقراص منفصلة. وذلك لأن ZooKeeper/Keeper شديدا الحساسية لكمون القرص، وقد يستهلك ClickHouse جميع موارد النظام المتاحة. يمكن أن يكون لديك مراقبون لـ ZooKeeper ضمن المجموعة، لكن يجب ألّا تتفاعل خوادم ClickHouse مع هؤلاء المراقبين. لا تغيّر إعداد minSessionTimeout، إذ قد تؤثر القيم الكبيرة في استقرار إعادة تشغيل ClickHouse. مع الإعدادات الافتراضية، فإن ZooKeeper أشبه بقنبلة موقوتة:
لن يحذف خادم ZooKeeper الملفات من اللقطات والسجلات القديمة عند استخدام الإعدادات الافتراضية (انظر autopurge)، وتقع هذه المسؤولية على عاتق المسؤول عن التشغيل.
يجب إبطال مفعول هذه القنبلة. يُستخدم إعداد ZooKeeper ‏(3.5.1) أدناه في بيئة إنتاج كبيرة: zoo.cfg:
إصدار Java:
معلمات JVM:
تهيئة Salt:

برامج مكافحة الفيروسات

إذا كنت تستخدم برنامج مكافحة فيروسات، فاضبطه بحيث يتجاهل المجلدات التي تحتوي على ملفات بيانات ClickHouse (/var/lib/clickhouse)، وإلا فقد يتراجع الأداء وقد تواجه أخطاء غير متوقعة أثناء إدخال البيانات وعمليات الدمج في الخلفية.
آخر تعديل في ٢٩ يونيو ٢٠٢٦