Optimizing Linux Server Settings for Enhanced ClickHouse Performance: A Guide for High-Volume Data Ingestion
Optimizing a Linux server for ClickHouse, especially to handle high-velocity, high-volume data ingestion, involves several layers of system tuning. These enhancements are designed to maximize the performance of ClickHouse by leveraging the full potential of the underlying Linux system. Here are practical tips and tricks for tuning a Linux server specifically for ClickHouse performance:
1. Increase File Descriptors
ClickHouse can open a lot of files simultaneously, especially in high-load environments. Increase the number of available file descriptors to prevent "Too many open files" errors.
Edit Limits Configuration:
# Edit /etc/security/limits.conf * soft nofile 262144 * hard nofile 262144
Apply Changes:
# For the changes to take effect without rebooting ulimit -n 262144
2. Optimize Network Settings
To improve the handling of high volumes of incoming connections and data, optimize the TCP stack:
Increase the Backlog and Buffers:
# Edit /etc/sysctl.conf net.core.somaxconn = 4096 net.core.netdev_max_backlog = 10000 net.ipv4.tcp_max_syn_backlog = 4096 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216
Apply Network Changes:
sysctl -p
3. Adjust I/O Scheduling
The default I/O scheduler might not be optimal for database workloads. Changing the scheduler to deadline
or noop
can improve performance for SSDs:
Change Scheduler for SSDs:
echo 'deadline' > /sys/block/sda/queue/scheduler
4. Optimize File System
Using the XFS or EXT4 file systems can enhance performance. XFS is particularly recommended for its scalability and performance with large files:
Mount Options: When mounting file systems, use options that reduce latency and improve throughput:
# For example, mounting an XFS file system mount -o noatime,nodiratime /dev/sda /var/lib/clickhouse
5. Control Swappiness
Swappiness controls the degree to which the system favors swap over RAM. A lower value is preferred for database systems to force the Linux kernel to use RAM more aggressively.
Reduce Swappiness:
# Set swappiness to a lower value sysctl vm.swappiness=10
6. Tune CPU Frequency Scaling
Ensure that CPU frequency scaling is set to performance mode to prevent fluctuations in CPU clock speed, which can impact latency:
Set CPU to Performance Mode:
# Apply to all CPUs for CPU in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor do echo performance > $CPU done
7. Disable Transparent Huge Pages (THP)
THP can cause performance degradation with databases due to how memory is managed. It's often better to disable it:
Disable THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
8. Regular System Monitoring and Maintenance
Keep an eye on system metrics such as CPU usage, I/O wait, memory usage, and network throughput. Regularly updating the Linux kernel and system packages can also help maintain optimal performance.
By implementing these optimizations, you can significantly enhance the performance of ClickHouse on a Linux server, particularly in scenarios involving high data ingestion rates and volumes. Regularly review and adjust these settings based on the specific workloads and system behavior over time.
Subscribe to my newsletter
Read articles from Shiv Iyer directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Shiv Iyer
Shiv Iyer
Over two decades of experience as a Database Architect and Database Engineer with core expertize in Database Systems Architecture/Internals, Performance Engineering, Scalability, Distributed Database Systems, SQL Tuning, Index Optimization, Cloud Database Infrastructure Optimization, Disk I/O Optimization, Data Migration and Database Security. I am the founder CEO of MinervaDB Inc. and ChistaDATA Inc.