> ## 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.

# join_runtime_* session settings

> ClickHouse session settings in the join_runtime_* generated group.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Version", "Default value", "Comment"];
  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
  }}>
        Version history
      </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
  }}>Type</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Default</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Changeable without restart
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

These settings are available in [system.settings](/reference/system-tables/settings) and are autogenerated from [source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<h2 id="join_runtime_bloom_filter_bytes">
  join\_runtime\_bloom\_filter\_bytes
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "524288"},{"label": "The JOIN runtime filters became a Production tier feature."}]}, {"id": "row-2","items": [{"label": "25.10"},{"label": "524288"},{"label": "New setting"}]}]} />

Size in bytes of a bloom filter used as JOIN runtime filter (see enable\_join\_runtime\_filters setting).

<h2 id="join_runtime_bloom_filter_hash_functions">
  join\_runtime\_bloom\_filter\_hash\_functions
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "3"},{"label": "The JOIN runtime filters became a Production tier feature."}]}, {"id": "row-2","items": [{"label": "25.10"},{"label": "3"},{"label": "New setting"}]}]} />

Number of hash functions in a bloom filter used as JOIN runtime filter (see enable\_join\_runtime\_filters setting).

<h2 id="join_runtime_bloom_filter_max_ratio_of_set_bits">
  join\_runtime\_bloom\_filter\_max\_ratio\_of\_set\_bits
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0.7"},{"label": "The JOIN runtime filters became a Production tier feature."}]}, {"id": "row-2","items": [{"label": "26.1"},{"label": "0.7"},{"label": "New setting"}]}]} />

If the number of set bits in a runtime bloom filter exceeds this ratio the filter is completely disabled to reduce the overhead.

<h2 id="join_runtime_filter_blocks_to_skip_before_reenabling">
  join\_runtime\_filter\_blocks\_to\_skip\_before\_reenabling
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "30"},{"label": "The JOIN runtime filters became a Production tier feature."}]}, {"id": "row-2","items": [{"label": "26.1"},{"label": "30"},{"label": "New setting"}]}]} />

Number of blocks that are skipped before trying to dynamically re-enable a runtime filter that previously was disabled due to poor filtering ratio.

<h2 id="join_runtime_filter_exact_values_limit">
  join\_runtime\_filter\_exact\_values\_limit
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "10000"},{"label": "The JOIN runtime filters became a Production tier feature."}]}, {"id": "row-2","items": [{"label": "25.10"},{"label": "10000"},{"label": "New setting"}]}]} />

Maximum number of elements in runtime filter that are stored as is in a set, when this threshold is exceeded it switches to bloom filter.

<h2 id="join_runtime_filter_from_fixed_hash_table">
  join\_runtime\_filter\_from\_fixed\_hash\_table
</h2>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "1"},{"label": "New setting."}]}]} />

When the hash join build side was converted to a FixedHashMap (see `enable_join_fixed_hash_table_conversion`), use that hash map directly as the runtime filter.

<h2 id="join_runtime_filter_min_probe_rows">
  join\_runtime\_filter\_min\_probe\_rows
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "1000"},{"label": "The JOIN runtime filters became a Production tier feature."}]}, {"id": "row-2","items": [{"label": "26.8"},{"label": "1000"},{"label": "New setting to control minimum probe side size for installing JOIN runtime filters. It wasn't limited before, so previous value is 0 meaning always install."}]}]} />

If, at query planning time, the probe side of a JOIN is estimated to produce no more than this number of rows, the JOIN runtime filter is not created. Building and applying a runtime filter for a tiny probe side costs more than it saves. Set to 0 to always create the runtime filter regardless of the estimated probe size.

<h2 id="join_runtime_filter_pass_ratio_threshold_for_disabling">
  join\_runtime\_filter\_pass\_ratio\_threshold\_for\_disabling
</h2>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "0.7"},{"label": "The JOIN runtime filters became a Production tier feature."}]}, {"id": "row-2","items": [{"label": "26.1"},{"label": "0.7"},{"label": "New setting"}]}]} />

If ratio of passed rows to checked rows is greater than this threshold the runtime filter is considered as poorly performing and is disabled for the next `join_runtime_filter_blocks_to_skip_before_reenabling` blocks to reduce the overhead.

<h2 id="join_runtime_filter_size_from_hash_table_stats">
  join\_runtime\_filter\_size\_from\_hash\_table\_stats
</h2>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "1"},{"label": "Use hash table size statistics collected from previous executions to size the JOIN runtime filter. When disabled, fall back to the fixed `join_runtime_bloom_filter_bytes`."}]}]} />

Use hash table size statistics collected from previous executions to size the JOIN runtime filter. When disabled, fall back to the fixed `join_runtime_bloom_filter_bytes`.
