ClickHouse settings.
Per-query
SELECT ... SETTINGS max_threads = 16, max_memory_usage = 10000000000;
SET max_threads = 16;
SET max_memory_usage = 10000000000;
Profiles
/etc/clickhouse-server/users.xml:
<profiles>
<default>
<max_memory_usage>10000000000</max_memory_usage>
<max_threads>0</max_threads>
<readonly>0</readonly>
</default>
<readonly>
<readonly>1</readonly>
</readonly>
</profiles>
Common settings
max_threads # parallelism (0=auto)
max_memory_usage # bytes per query
max_bytes_before_external_group_by
max_execution_time # seconds
max_rows_to_read
max_result_rows
max_result_bytes
join_use_nulls
allow_experimental_* # opt-in features
Quotas
<quotas>
<default>
<interval>
<duration>3600</duration>
<queries>10000</queries>
<errors>100</errors>
<result_rows>1000000</result_rows>
<read_rows>100000000</read_rows>
<execution_time>3600</execution_time>
</interval>
</default>
</quotas>
Users + permissions
<users>
<readonly_user>
<password_sha256_hex>...</password_sha256_hex>
<profile>readonly</profile>
<quota>default</quota>
<networks><ip>::/0</ip></networks>
<access_management>0</access_management>
</readonly_user>
</users>
Resource isolation
- Per-user memory cap.
- Per-user thread cap.
- Workload management (v23+).
Hot config reload
SYSTEM RELOAD CONFIG;
Common mistakes
- Default max_memory_usage too low for big queries.
- No quotas → one user breaks others.
- Anonymous default user open.
- Allow_experimental on prod.
Read this next
If you want my CH tuning config, it’s at rajpoot.dev .
Building something AI-, backend-, or data-heavy and want a second pair of eyes? I do consulting and freelance work — see my projects and ways to reach me at rajpoot.dev .