Setelah ClickHouse terpasang dan berjalan dengan baik, langkah selanjutnya adalah memastikan query Anda berjalan secepat mungkin.
ClickHouse memang cepat secara default, tetapi dengan konfigurasi dan teknik optimasi yang tepat, performanya bisa meningkat berkali-kali lipat — bahkan untuk dataset berukuran terabyte hingga petabyte.
Berikut panduan praktis untuk mengoptimalkan query dan struktur data di ClickHouse agar Anda mendapatkan performa maksimal.
Contents
- 1 1. Gunakan Engine yang Tepat
- 2 2. Gunakan Partisi dengan Bijak
- 3 3. Batasi Kolom yang Dibaca
- 4 4. Gunakan PREWHERE untuk Filter Lebih Cepat
- 5 5. Manfaatkan Materialized Views
- 6 6. Kompresi dan Encoding
- 7 7. Gunakan Index Sekunder (Data Skipping Index)
- 8 8. Optimalkan Konfigurasi Server
- 9 9. Gunakan Profiling untuk Menganalisis Query
- 10 10. Distribusi Data di Kluster
- 11 Kesimpulan
1. Gunakan Engine yang Tepat
ClickHouse memiliki beberapa engine tabel. Engine utama dan paling umum adalah MergeTree, yang mendukung indeks, partisi, dan penyortiran data.
Gunakan variasi MergeTree sesuai kebutuhan:
| Engine | Kegunaan |
|---|---|
MergeTree |
Engine dasar untuk tabel analitik umum. |
ReplacingMergeTree |
Menyimpan versi terbaru data (berguna untuk update ringan). |
SummingMergeTree |
Mengagregasi nilai numerik secara otomatis saat merge. |
AggregatingMergeTree |
Menyimpan hasil agregasi untuk mempercepat query berat. |
CollapsingMergeTree |
Untuk data dengan event insert/delete. |
ReplicatedMergeTree |
Untuk kluster dengan replikasi otomatis. |
Contoh:
Tips:
TentukanORDER BYberdasarkan kolom yang sering digunakan untuk filter (WHERE) atau agregasi (GROUP BY).
2. Gunakan Partisi dengan Bijak
Partisi membantu ClickHouse membaca sebagian data saja, bukan seluruh tabel.
Idealnya, partisi dibuat berdasarkan waktu atau kategori data yang sering digunakan.
Contoh partisi berdasarkan bulan:
Keuntungan partisi:
-
Query lebih cepat karena hanya membaca blok data tertentu.
-
Lebih mudah melakukan manajemen data (drop/merge).
-
Meningkatkan efisiensi penyimpanan dan penghapusan data lama.
Hindari: Membuat terlalu banyak partisi kecil (mis. satu per hari untuk dataset sangat besar). Gunakan partisi bulanan atau mingguan agar tetap efisien.
3. Batasi Kolom yang Dibaca
ClickHouse membaca hanya kolom yang disebutkan dalam query.
Maka, hindari SELECT * karena akan memuat seluruh kolom dan memperlambat query.
Contoh yang efisien:
4. Gunakan PREWHERE untuk Filter Lebih Cepat
PREWHERE memfilter data sebelum kolom lain dibaca dari disk.
Ini mempercepat query pada tabel besar.
Contoh:
ClickHouse kadang otomatis memindahkan kondisi
WHEREmenjadiPREWHERE, tapi Anda juga bisa menentukannya manual untuk kontrol penuh.
5. Manfaatkan Materialized Views
Jika Anda sering menjalankan query agregasi yang sama, buat Materialized View untuk menyimpan hasilnya secara otomatis.
Contoh:
Hasil view ini otomatis diperbarui setiap kali ada data baru, sehingga query agregasi menjadi instan.
6. Kompresi dan Encoding
ClickHouse mendukung berbagai metode kompresi (LZ4, ZSTD, Deflate).
Gunakan ZSTD untuk kompresi terbaik antara kecepatan dan efisiensi.
Contoh konfigurasi di kolom:
Kompresi yang tepat bisa mengurangi ukuran data hingga 5–10 kali lipat tanpa penurunan performa baca yang signifikan.
7. Gunakan Index Sekunder (Data Skipping Index)
ClickHouse tidak menggunakan indeks seperti database tradisional, tapi mendukung Data Skipping Index untuk mempercepat pencarian pada kolom tertentu.
Contoh:
Dengan index ini, ClickHouse dapat melewati blok data yang tidak relevan dengan filter query Anda.
8. Optimalkan Konfigurasi Server
Beberapa parameter konfigurasi di config.xml dapat mempercepat kinerja:
| Parameter | Fungsi | Rekomendasi |
|---|---|---|
max_threads |
Jumlah thread per query | Set ke jumlah CPU logical core |
max_memory_usage |
Batas memori per query | 50–70% dari total RAM |
max_bytes_before_external_group_by |
Batas sebelum spill ke disk | Sesuaikan dengan RAM besar |
max_parallel_replicas |
Query paralel antar node | Aktifkan untuk cluster |
Setelah mengubah konfigurasi, restart layanan ClickHouse agar pengaturan berlaku.
9. Gunakan Profiling untuk Menganalisis Query
Gunakan fitur EXPLAIN dan tabel sistem untuk melihat performa query.
Contoh:
Atau lihat histori eksekusi:
Gunakan hasil ini untuk menemukan query yang paling berat dan memperbaikinya.
10. Distribusi Data di Kluster
Untuk skala besar, ClickHouse dapat dijalankan dalam mode kluster dengan replikasi dan sharding.
-
Sharding: membagi data berdasarkan logika tertentu (mis. region atau waktu).
-
Replikasi: menduplikasi data antar node untuk ketahanan dan ketersediaan tinggi.
-
Distributed Engine: memungkinkan query berjalan di seluruh node secara paralel.
Contoh penggunaan:
Kesimpulan
Optimasi di ClickHouse bukan hanya soal query cepat, tapi tentang desain tabel, strategi partisi, dan konfigurasi sistem yang tepat.
Dengan mengikuti prinsip di atas, Anda bisa mencapai performa luar biasa bahkan di dataset berskala miliaran baris.
Ringkasan Kunci:
-
Gunakan
MergeTreedan partisi yang efisien. -
Hindari
SELECT *, gunakanPREWHERE. -
Manfaatkan materialized view dan index skipping.
-
Pantau performa lewat
system.query_log. -
Optimalkan konfigurasi server sesuai kapasitas perangkat keras.