الوصف
يحتوي على معلومات حول سياسات التخزين ووحدات التخزين المُعرَّفة في تهيئة الخادم.
الأعمدة
policy_name(String) — اسم سياسة التخزين.volume_name(String) — اسم وحدة التخزين.volume_priority(UInt64) — أولوية وحدة التخزين.disks(Array(String)) — قائمة بأسماء جميع الأقراص التابعة لسياسة التخزين هذه.volume_type(Enum8('JBOD' = 0, 'SINGLE_DISK' = 1, 'UNKNOWN' = 2)) — نوع وحدة التخزين: JBOD أو قرص واحد.max_data_part_size(UInt64) — الحجم الأقصى لجزء بيانات يمكن تخزينه على أي من أقراص وحدة التخزين.move_factor(Float32) — عندما تنخفض المساحة المتاحة عن هذه القيمة، تبدأ البيانات بالانتقال تلقائيًا إلى وحدة التخزين التالية، إن وُجدت (القيمة الافتراضية: 0.1).prefer_not_to_merge(UInt8) — لا ينبغي استخدام هذا الإعداد. يعطّل دمج أجزاء البيانات على وحدة التخزين هذه، مما يضر بالأداء ويؤدي إلى تدهوره.perform_ttl_move_on_insert(UInt8) — يعطّل إجراء TTL move عند INSERT جزء بيانات. افتراضيًا، عند تفعيله، إذا أُدرج جزء بيانات انتهت صلاحيته بالفعل وفق قاعدة TTL move، فإنه ينتقل فورًا إلى وحدة التخزين أو القرص المحدد في قاعدة TTL move.load_balancing(Enum8('ROUND_ROBIN' = 0, 'LEAST_USED' = 1)) — سياسة موازنة الأقراص:round_robinأوleast_used.
اختيار وحدة التخزين عند INSERT
عندما يُنشئ INSERT جزء بيانات جديدًا، يختار ClickHouse قرص الوجهة
بتطبيق القواعد التالية بالترتيب. وتُعتمد أول قاعدة تنطبق ويمكنها
حجز مساحة للجزء؛ وإلا (إذا كانت القاعدة غير منطبقة، أو لا توجد مساحة
حرة، أو تم تجاوز max_data_part_size) فيستمر التقييم مع القاعدة
التالية.
- قاعدة TTL move — إذا كان الشرط
TTL <expr> TO VOLUME 'X'(أوTO DISK 'X') قد أصبح بالفعل من الماضي بالنسبة إلى الصفوف التي يجري إدراجها، وكانperform_ttl_move_on_insert = 1(افتراضيًا) على وحدة تخزين وجهة TTL (وبالنسبة إلىTO DISK 'X'، تكون وحدة التخزين التي تحتوي على القرصX)، فإن الجزء يُكتب مباشرةً إلى تلك الوجهة. وإذا فشل الحجز هناك، فتتراجع عمليةinsertإلى الخطوات 2–4؛ ويُسجَّل تحذير، لكنINSERTلا يفشل لهذا السبب وحده. max_data_part_size— ترفض وحدة التخزين الأجزاء الأكبر منmax_data_part_sizeالخاص بها. ويُتحقق من ذلك لكل وحدة تخزين على حدة؛ ولا يقيّد حجز الخطوة 1 من نوعTTL ... TO DISK 'X'، لأنه يستهدف القرص مباشرةً.volume_priority— من بين وحدات التخزين المتبقية، تُختار الوحدة ذات أقل قيمةvolume_priority. أما وحدات التخزين التي لا تحتوي على<volume_priority>صريح فتُرتَّب بحسب موضعها في الإعدادات.load_balancing— بعد اختيار وحدة التخزين، يُختار القرص داخل تلك الوحدة وفقًا لسياسةload_balancingالخاصة بها (round_robinأوleast_used).
لفرض أن تحترم عمليات الإدراج volume_priority حتى عندما تنطبق قاعدة
TTL move "منتهية بالفعل"، اضبط perform_ttl_move_on_insert = 0 على
وحدة تخزين وجهة TTL (وبالنسبة إلى TO DISK 'X'، على وحدة التخزين التي تحتوي على
القرص X). عندئذٍ يُكتب الجزء أولًا إلى وحدة التخزين ذات الأولوية الأقل ثم
يُنقل إلى وجهة TTL بواسطة مهمة نقل في الخلفية (يمكن ملاحظتها عبر
system.moves). راجع
إعداد perform_ttl_move_on_insert في محرك MergeTree.