> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# إعدادات الجلسة max_bytes_*

> إعدادات جلسة ClickHouse ضمن المجموعة المُولَّدة max_bytes_*.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["الإصدار", "القيمة الافتراضية", "التعليق"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        سجل الإصدارات
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>النوع</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>القيمة الافتراضية</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          يمكن تغييره دون إعادة التشغيل
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

هذه الإعدادات متاحة في [system.settings](/ar/reference/system-tables/settings)، ويجري توليدها تلقائيًا من [الشفرة المصدرية](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

## max\_bytes\_before\_external\_distinct

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0"},{"label": "إعداد جديد لتمكين كتابة `DISTINCT` إلى القرص عند تجاوز استخدام الذاكرة العتبة المحددة بالبايت. إذا كانت القيمة 0، فلا يُطبَّق سوى `max_bytes_ratio_before_external_distinct`."}]}]} />

عتبة ذاكرة الاستعلام، بالبايت، لكتابة بيانات `DISTINCT` إلى القرص. وقد يتجاوز الاستخدام الفعلي للذاكرة
هذه العتبة.

تُعطّل القيمة `0` هذه العتبة. وإذا كان `max_bytes_ratio_before_external_distinct` يحدّد عتبة أيضًا،
فتُعتمد الأصغر منهما. اضبط كلا الإعدادين على `0` لتعطيل الكتابة.

راجع [DISTINCT في الذاكرة الخارجية](/ar/reference/statements/select/distinct#distinct-in-external-memory).

## max\_bytes\_before\_external\_group\_by

<SettingsInfoBlock type="UInt64" default_value="0" />

القيمة الافتراضية في Cloud: نصف سعة الذاكرة لكل نسخة متماثلة.

يؤدي إلى تفعيل أو تعطيل تنفيذ عبارات `GROUP BY` باستخدام الذاكرة الخارجية.
(راجع [‏`GROUP BY` في الذاكرة الخارجية](/ar/reference/statements/select/group-by#group-by-in-external-memory))

القيم الممكنة:

* الحد الأقصى من ذاكرة RAM (بالبايت) الذي يمكن أن تستخدمه عملية [GROUP BY](/ar/reference/statements/select/group-by) واحدة.
* `0` — تعطيل `GROUP BY` في الذاكرة الخارجية.

<Note>
  إذا تجاوز استخدام الذاكرة أثناء عمليات GROUP BY هذه العتبة المحددة بالبايت،
  فسيتم تفعيل وضع 'التجميع الخارجي' (نقل البيانات المرحلية إلى القرص).

  القيمة الموصى بها هي نصف ذاكرة النظام المتاحة.
</Note>

## max\_bytes\_before\_external\_join

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "إعداد جديد للتحكم في الكتابة التلقائية لـ hash joins إلى القرص. تؤدي القيمة غير الصفرية إلى تفعيل ذلك وتحديد عتبة البايتات."}]}]} />

إذا تم تعيينه إلى قيمة غير صفرية، فسيتم تلقائيًا تحويل hash join إلى grace hash join لتمكين الكتابة إلى القرص عندما تتجاوز البيانات الموجودة على الجانب الأيمن هذا العدد من البايتات. ويشكّل هذا الإعداد، مع `max_bytes_ratio_before_external_join`، محفّز الكتابة إلى القرص القائم على العتبة لكل `join_algorithm` قائم على التجزئة، بما في ذلك `grace_hash` الذي يتطلب أن يكون أحد الإعدادين غير صفري. وبمجرد أن تجعل عتبة غير صفرية عملية الربط قابلة للكتابة إلى القرص، يمكن لـ `enable_adaptive_memory_spill_scheduler` أن يجبرها على الكتابة إلى القرص تحت ضغط الذاكرة قبل بلوغ العتبة؛ أما إذا كان كلا الإعدادين `0` فلن تكتب عملية الربط إلى القرص أبدًا، ومن ثم لا يكون لدى المجدول ما يطلقه. والاستثناء هو `legacy_join_size_limits_trigger_spilling`: فعند تفعيله، يتجاهل `grace_hash` المستقل كلا الإعدادين ويكتب إلى القرص بناءً على `max_rows_in_join` / `max_bytes_in_join` بدلًا منهما. وعند تعيينه إلى 0 (القيمة الافتراضية)، يتم تعطيل عتبة البايتات المطلقة هذه، ولكن قد تظل الكتابة التلقائية إلى القرص تحدث عبر `max_bytes_ratio_before_external_join` (الذي تبلغ قيمته الافتراضية `0.5`)؛ اضبط كليهما على `0` لتعطيل الكتابة التلقائية إلى القرص بالكامل. وهو يمنع تحسين القراءة بالترتيب عبر join.

## max\_bytes\_before\_external\_sort

<SettingsInfoBlock type="UInt64" default_value="0" />

قيمة Cloud الافتراضية: نصف مقدار الذاكرة لكل نسخة متماثلة.

يؤدي إلى تمكين أو تعطيل تنفيذ عبارات `ORDER BY` باستخدام الذاكرة الخارجية. راجع [تفاصيل تنفيذ ORDER BY](/ar/reference/statements/select/order-by#implementation-details)
إذا تجاوز استهلاك الذاكرة أثناء عملية ORDER BY هذه العتبة بالبايت، فسيتم تفعيل وضع "الفرز الخارجي" (كتابة البيانات المرحلية إلى القرص).

القيم الممكنة:

* الحد الأقصى لحجم RAM (بالبايت) الذي يمكن أن تستخدمه عملية [ORDER BY](/ar/reference/statements/select/order-by) واحدة.
  القيمة الموصى بها هي نصف ذاكرة النظام المتاحة
* `0` — تعطيل `ORDER BY` باستخدام الذاكرة الخارجية.

## max\_bytes\_before\_remerge\_sort

<SettingsInfoBlock type="UInt64" default_value="1000000000" />

في حالة استخدام ORDER BY مع LIMIT، وعندما يتجاوز استخدام الذاكرة العتبة المحددة، تُنفَّذ خطوات إضافية لدمج الكتل قبل الدمج النهائي للإبقاء فقط على أول LIMIT صفوف.

## max\_bytes\_for\_lazy\_final

<SettingsInfoBlock type="UInt64" default_value="256000000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "256000000"},{"label": "إعداد جديد للحد الأقصى لعدد البايتات في المجموعة ضمن تحسين FINAL المؤجل"}]}]} />

الحد الأقصى لعدد البايتات في المجموعة ضمن تحسين FINAL المؤجل. وإذا تم تجاوزه، فسيتم الرجوع إلى FINAL العادي.

## max\_bytes\_in\_distinct

<SettingsInfoBlock type="UInt64" default_value="0" />

الحد الأقصى لعدد بايتات الحالة في الذاكرة (بالبايتات غير المضغوطة) التي يستخدمها جدول تجزئة عند استخدام DISTINCT.

## max\_bytes\_in\_join

<SettingsInfoBlock type="UInt64" default_value="0" />

الحد الأقصى للحجم بالبايت لبنية بيانات الجانب الأيمن (عادةً جدول تجزئة)
المستخدَمة عند تنفيذ ربط الجداول.

ينطبق هذا الإعداد على عمليات [SELECT ... JOIN](/ar/reference/statements/select/join)
وعلى [Join table engine](/ar/reference/engines/table-engines/special/join).

إذا كان الاستعلام يحتوي على عدة عمليات JOIN، فإن ClickHouse يفحص هذا الإعداد لكل
نتيجة وسيطة. وهو حد صارم لكل `join_algorithm` قائم على التجزئة: فعند بلوغ الحد
يرفع الاستعلام استثناءً أو يتوقف وفقًا لـ
[`join_overflow_mode`](/ar/reference/settings/session-settings/join#join_overflow_mode).
وهو لا يجعل عملية الربط تكتب إلى القرص أبدًا — فهذا القرار يعود إلى
[`max_bytes_before_external_join`](/ar/reference/settings/session-settings/max-bytes#max_bytes_before_external_join)
و
[`max_bytes_ratio_before_external_join`](/ar/reference/settings/session-settings/max-bytes#max_bytes_ratio_before_external_join).
ولأنه حد صارم وليس مُشغِّلًا، فإن ضبطه عند عتبة الكتابة إلى القرص أو دونها يؤدي عادةً
إلى فشل الاستعلام قبل أن تتمكن عملية الربط من الكتابة إلى القرص إطلاقًا —
إلا إذا كانت عملية الربط قادرة على الكتابة إلى القرص وأجبر `enable_adaptive_memory_spill_scheduler`
على الكتابة أولًا، أو أعاد
`legacy_join_size_limits_trigger_spilling` تحويل هذا الحد إلى مُشغِّل للكتابة
بالنسبة للجزء من عملية الربط الذي يعمل بالفعل على القرص.

يحسب هذا الحد ما تحتويه جداول التجزئة، لذا فإن عملية الربط التي كتبت إلى القرص تبلغه
عند تحميل كل حاوية وليس أثناء قراءة الجانب الأيمن: إذ يمكنها قراءة قدر أكبر
من الجانب الأيمن قبل التوقف مقارنةً بعملية ربط تجزئة تعمل في الذاكرة.

القيم الممكنة:

* عدد صحيح موجب.
* 0 — يكون التحكم في الذاكرة معطّلًا.

## max\_bytes\_in\_set

<SettingsInfoBlock type="UInt64" default_value="0" />

الحد الأقصى لعدد البايتات (من بيانات غير مضغوطة) التي تستخدمها المجموعة في العبارة `IN`
والناتجة عن استعلام فرعي.

## max\_bytes\_ratio\_before\_external\_distinct

<SettingsInfoBlock type="Double" default_value="0.5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0.5"},{"label": "إعداد جديد لتفعيل كتابة `DISTINCT` إلى القرص عندما يتجاوز استهلاك الذاكرة النسبة المحددة من الذاكرة المتاحة. إذا كانت القيمة 0، فلا يُطبَّق سوى `max_bytes_before_external_distinct`."}]}]} />

نسبة من ذاكرة الخادم أو المستخدم المتاحة تُستخدم لحساب عتبة `DISTINCT` الخارجية عند
بدء التنفيذ. فمثلاً، تستخدم القيمة `0.5` نصف الذاكرة المتاحة.

يجب ألا تقل القيم عن `0` وأن تكون أصغر من `1`. وتعطّل القيمة `0` هذه العتبة. وفي غياب حد ذاكرة
مطبَّق على الخادم أو المستخدم، لا يكون للنسبة أي أثر.

لا يؤثر `max_memory_usage` في هذا الحساب. ولتهيئة الكتابة بالنسبة إلى ذلك الحد،
استخدم `max_bytes_before_external_distinct`، مع ترك مساحة لاستهلاك ذاكرة إضافي.

## max\_bytes\_ratio\_before\_external\_group\_by

<SettingsInfoBlock type="Double" default_value="0.5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "0.5"},{"label": "تمكين الكتابة التلقائية إلى القرص افتراضيًا."}]}, {"id": "row-2","items": [{"label": "24.12"},{"label": "0"},{"label": "إعداد جديد."}]}]} />

النسبة من الذاكرة المتاحة التي يُسمح لـ `GROUP BY` باستخدامها. وعند بلوغها،
تُستخدَم الذاكرة الخارجية في التجميع.

على سبيل المثال، إذا ضُبطت على `0.6`، فسيسمح `GROUP BY` باستخدام 60% من الذاكرة المتاحة
(لـ server/user/merges) في بداية التنفيذ، وبعد ذلك سيبدأ
باستخدام التجميع الخارجي.

## max\_bytes\_ratio\_before\_external\_join

<SettingsInfoBlock type="Double" default_value="0.5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "0.5"},{"label": "إعداد جديد: نسبة الذاكرة المتاحة المستخدمة كعتبة للكتابة إلى القرص في hash joins. يكون مُمكّنًا افتراضيًا عند `0.5`، بما يماثل `max_bytes_ratio_before_external_group_by` و`max_bytes_ratio_before_external_sort`. ويُستخدم مع القيمة المطلقة `max_bytes_before_external_join` (وتُطبَّق القيمة الأصغر بينهما)."}]}]} />

هي نسبة الذاكرة المتاحة المسموح باستخدامها لـ `JOIN`. وعند بلوغها، سيُحوَّل hash join إلى grace hash join لكتابة بيانات الجانب الأيمن إلى القرص.

على سبيل المثال، إذا ضُبطت على `0.6`، فسيسمح `JOIN` باستخدام `60%` من الذاكرة المتاحة (للخادم/المستخدم/عمليات الدمج) لجدول تجزئة للجانب الأيمن في بداية التنفيذ؛ وبعد ذلك تبدأ الكتابة إلى القرص.

إذا جرى تعيين كلٍّ من `max_bytes_before_external_join` و`max_bytes_ratio_before_external_join`، فستُستخدم عتبة النتيجة الأصغر. وإذا كانت النسبة `0`، فلن يُطبَّق إلا الإعداد المطلق.

يكون له تأثير مع كل `join_algorithm` قائم على التجزئة، بما في ذلك `grace_hash`، شريطة أن يكون قد جرى تهيئة مسار بيانات مؤقت.

## max\_bytes\_ratio\_before\_external\_sort

<SettingsInfoBlock type="Double" default_value="0.5" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "0.5"},{"label": "تمكين الكتابة التلقائية إلى القرص افتراضيًا."}]}, {"id": "row-2","items": [{"label": "24.12"},{"label": "0"},{"label": "إعداد جديد."}]}]} />

النسبة من الذاكرة المتاحة المسموح باستخدامها لعملية `ORDER BY`. وعند بلوغ هذا الحد، يُستخدم الفرز الخارجي.

على سبيل المثال، إذا ضُبطت على `0.6`، فسيسمح `ORDER BY` باستخدام `60%` من الذاكرة المتاحة (للـ server/user/merges) في بداية التنفيذ، وبعد ذلك سيبدأ باستخدام الفرز الخارجي.

لاحظ أن `max_bytes_before_external_sort` يظل معمولًا به، ولن تتم الكتابة إلى القرص إلا إذا كانت كتلة الفرز أكبر من `max_bytes_before_external_sort`.

## max\_bytes\_to\_read

<SettingsInfoBlock type="UInt64" default_value="0" />

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

## max\_bytes\_to\_read\_leaf

<SettingsInfoBlock type="UInt64" default_value="0" />

الحد الأقصى لعدد البايتات (من البيانات غير المضغوطة) التي يمكن قراءتها من
جدول محلي على عقدة طرفية عند تنفيذ استعلام موزع. ومع أن الاستعلامات الموزعة
قد تُصدر عدة استعلامات فرعية لكل shard (طرفية)، فلن يُفحص هذا الحد إلا
في مرحلة القراءة على العقد الطرفية، وسيُتجاهل في
مرحلة دمج النتائج على العقدة الجذرية.

على سبيل المثال، إذا كان العنقود يتكوّن من 2 shard وكان كل shard يحتوي على جدول فيه
100 بايت من البيانات، فإن استعلامًا موزعًا يُفترض أن يقرأ جميع البيانات
من كلا الجدولين مع الإعداد `max_bytes_to_read=150` سيفشل لأن الإجمالي
سيبلغ 200 بايت. أما الاستعلام مع `max_bytes_to_read_leaf=150` فسينجح لأن
العقد الطرفية لن تقرأ أكثر من 100 بايت.

يُفحص هذا القيد لكل جزء من البيانات تتم معالجته.

<Note>
  هذا الإعداد غير مستقر مع `prefer_localhost_replica=1`.
</Note>

## max\_bytes\_to\_sort

<SettingsInfoBlock type="UInt64" default_value="0" />

الحد الأقصى لعدد البايتات قبل الفرز. إذا تطلّبت عملية ORDER BY معالجة
كمية من البايتات غير المضغوطة تتجاوز المقدار المحدد، فسيُحدَّد السلوك
وفقًا لـ `sort_overflow_mode`، والذي يُضبط افتراضيًا على `throw`.

## max\_bytes\_to\_transfer

<SettingsInfoBlock type="UInt64" default_value="0" />

الحد الأقصى لعدد البايتات (بيانات غير مضغوطة) التي يمكن تمريرها إلى خادم
بعيد أو حفظها في جدول مؤقت عند تنفيذ عبارة GLOBAL IN/JOIN.
