Skip to main content

ما الذي يعنيه هذا الاستثناء

يرفع ClickHouse الاستثناء Too many parts عندما يؤدي تنفيذ INSERT إلى تجاوز حد مُعدّ مسبقًا لعدد أجزاء البيانات النشطة في جدول MergeTree. وغالبًا ما يتضمن الاستثناء الرسالة Merges are processing significantly slower than inserts. ينشئ كل INSERT متزامن جزء بيانات واحدًا على الأقل. وإذا كان الإدراج يحتوي على صفوف تخص عدة قيم قسم، فقد ينشئ ClickHouse جزءًا واحدًا لكل قسم متأثر. وتدمج عمليات الدمج في الخلفية الأجزاء الأصغر في أجزاء أكبر، ولكن إذا أُنشئت أجزاء جديدة بوتيرة أسرع مما يستطيع ClickHouse دمجها، فسيستمر عدد الأجزاء النشطة في الازدياد. يمكن أن يحدث هذا الاستثناء بسبب أيٍّ من هذين الإعدادين:
  • parts_to_throw_insert، الذي يحدّ من عدد الأجزاء النشطة في قسم واحد.
  • max_parts_in_total، الذي يحدّ من العدد الإجمالي للأجزاء النشطة في table.

تشخيص السبب

استخدم الاستعلام التالي للعثور على الأقسام التي تضم أكبر عدد من الأجزاء النشطة:
للتحقق من الحد المفروض على مستوى الجدول بواسطة max_parts_in_total، احسب جميع الأجزاء النشطة في الجدول:
تشمل الأسباب الشائعة ما يلي:
  • عمليات إدراج متزامنة صغيرة ومتكررة.
  • مفتاح تقسيم عالي الكاردينالية.
  • عمليات إدراج تتضمن صفوفًا تخص العديد من قيم الأقسام.
  • عمليات دمج في الخلفية لا تستطيع مواكبة الحمل بسبب محدودية معدل نقل بيانات التخزين، أو عدم كفاية المساحة الحرة على القرص، أو وجود تنازع على الموارد.
يمكنك فحص عمليات الدمج الجارية حاليًا في system.merges ومراجعة سجلات الخادم للتحقق من حالات فشل الدمج.

حلّ الاستثناء

عمليات الإدراج المتزامنة على دفعات

جمّع الصفوف في دفعات على جانب العميل قبل إدراجها. يجب أن تحتوي كل دفعة على 1,000 صف على الأقل، ومن الأفضل أن تضم بين 10,000 و100,000 صف. استهدف تنفيذ عملية INSERT متزامنة واحدة تقريبًا كل ثانية. فكلما قلّ عدد عمليات الإدراج وكبر حجمها، قلّ عدد الأجزاء التي يتم إنشاؤها وتراجع العمل المطلوب من عمليات الدمج في الخلفية.

استخدم عمليات الإدراج غير المتزامنة

إذا لم يكن التجميع على جهة العميل خيارًا عمليًا، فاستخدم عمليات الإدراج غير المتزامنة لكي يتمكن ClickHouse من تجميع البيانات الواردة على الخادم:
أبقِ wait_for_async_insert = 1 لكي لا يؤكّد ClickHouse عملية إدراج إلا بعد كتابة البيانات بنجاح.

راجع مفتاح التقسيم

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

استقصِ اختناقات الدمج

إذا كانت عمليات الإدراج مُجمَّعة بالفعل بالشكل المناسب، فتحقّق من أداء التخزين، ومساحة القرص المتاحة، ومهام خلفية المتنافسة. يعتمد معدّل الدمج على نظام التخزين، ومحرك الجدول، ومفتاح الترتيب، والضغط، وسعة CPU وI/O المتاحة.

تجنّب زيادة حدود الأجزاء باعتبارها الحل الأساسي

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

تحقّق من التعافي

أعِد تشغيل استعلام التشخيص بعد تغيير استراتيجية الإدراج أو مخطط التقسيم. ينبغي أن يستقر عدد الأجزاء النشطة ثم يبدأ بالانخفاض مع تدارك عمليات الدمج في الخلفية للتراكم. واصل مراقبة حالات فشل الإدراج، ومساحة القرص الحرة، وsystem.merges حتى يزول التراكم.
آخر تعديل في ١٤ أغسطس ٢٠٢٦