Bilgi Bankası
ClickHousePerformans ve kapasite 16 dk 14.06.2026

ClickHouse projection ve materialized view: ne zaman hangisini kullanmalı?

ClickHouse’ta her yavaş pano sorgusunu ham tablo üzerinde hızlandırmaya çalışmak bazen gereksiz inat olur. Bazı sorular tekrar tekrar soruluyorsa, cevabı önceden hazırlamak daha doğrudur. Bu yazı projection, materialized view ve özet tablo kararını sadeleştirir.

Bu yazı sana şu durumda yardımcı olur
  • pano aynı agregasyonu sürekli çalıştırıyor
  • ham event tablosu büyüdükçe raporlar yavaşlıyor
  • ORDER BY tek başına tüm sorgu desenlerini karşılamıyor
  • aynı veriden farklı okuma biçimleri gerekiyor
  • materialized view mı projection mı karar verilemiyor
Yazıyı bitirince

Ham tabloyu ne zaman optimize edeceğinizi, ne zaman projection düşüneceğinizi ve ne zaman materialized view/rollup tablo kurmanız gerektiğini ayırabileceksiniz.

TürkDB açısından ürünleşme notu

Bu bölüm, TürkDB’nin ilgili problemi hangi ürün ilkeleri ve kontrol noktalarıyla ele alacağını anlatır. Kapsam, gerçek iş yükü ve ihtiyaçla birlikte netleşir.

TürkDB ClickHouse’u yönetilen ve izlenebilir şekilde sunmayı hedefler; ama analitik modelleme kararını sizin ürün sorularınız belirler. Platform kapasite ve erişim zeminini pilotta kanıtlamalı, doğru hızlandırma yapısını query_log ve kullanım deseninizle siz seçmelisiniz.

Önce şunu sorun: soru tekrar ediyor mu?

Bir pano her dakika aynı metrikleri soruyorsa ham tabloyu her seferinde taramak pahalı olabilir. Analitik sistemlerde iyi performans bazen daha hızlı sorgu yazmak değil, aynı cevabı sürekli yeniden hesaplamamaktır.

Bu yüzden projection ve materialized view kararından önce ürün sorusunu anlamak gerekir: kullanıcı ham event mi görmek istiyor, yoksa gün/tenant/event bazında hazır metrik mi?

Projection aynı tablonun başka okuma düzeni gibidir

Projection, aynı tablonun içinde farklı bir fiziksel düzen veya ön hesaplama sağlayabilir. Sorgu optimizer uygun görürse projection kullanabilir. Bu, bazı sorgu desenlerini hızlandırırken uygulama tarafında ayrı tablo yönetimini azaltabilir.

Ama projection her şeyi görünmezce çözmez. Sorgunun projection kullanıp kullanmadığını ölçmek gerekir; aksi halde ek yazma ve depolama maliyeti üretip beklenen hızlanmayı alamayabilirsiniz.

Projection fikri

clickhouse-projection.sql
ALTER TABLE events
ADD PROJECTION events_by_user
(
  SELECT tenant_id, user_id, created_at, event_name
  ORDER BY (tenant_id, user_id, created_at)
);

ALTER TABLE events MATERIALIZE PROJECTION events_by_user;

Materialized view cevabı başka tabloya hazırlar

Materialized view özellikle tekrar eden agregasyonlarda çok değerlidir. Ham event verisi akarken günlük veya saatlik özet tabloyu besleyebilirsiniz. Pano artık milyarlarca ham satırı değil, çok daha küçük bir özet tabloyu okur.

Günlük event rollup örneği

clickhouse-materialized-view.sql
CREATE TABLE events_daily
(
  tenant_id String,
  event_name LowCardinality(String),
  day Date,
  events UInt64
)
ENGINE = SummingMergeTree
PARTITION BY toYYYYMM(day)
ORDER BY (tenant_id, event_name, day);

CREATE MATERIALIZED VIEW events_daily_mv
TO events_daily
AS
SELECT
  tenant_id,
  event_name,
  toDate(created_at) AS day,
  count() AS events
FROM events
GROUP BY tenant_id, event_name, day;

Kararı query_log ile doğrulayın

Projection veya materialized view ekledikten sonra “hızlandı gibi” demek yetmez. query_log üzerinde read_rows, read_bytes ve duration değerleri düşüyor mu bakın. Eğer düşmüyorsa sorgu hâlâ ham tabloyu okuyor olabilir.

TürkDB tarafındaki doğru ilişki burada kapasite kararını ertelemek değil, daha bilinçli vermektir. Önce okuma modelini düzeltin; sonra hâlâ sınırdaysanız ölçek büyütmek daha anlamlıdır.

Önce/sonra query_log kontrolü

clickhouse-rollup-verify.sql
SELECT
  query_duration_ms,
  read_rows,
  formatReadableSize(read_bytes) AS read_size,
  left(query, 180) AS query
FROM system.query_log
WHERE type = 'QueryFinish'
  AND event_time > now() - INTERVAL 30 MINUTE
ORDER BY query_duration_ms DESC
LIMIT 20;
Devam etmek istersen

Sorunu motor bazında derinleştirin

Benzer belirtiler farklı motorlarda farklı nedenlere dayanır; yayınlanan tüm rehberleri ana sayfadan takip edebilirsiniz.

Tüm makaleler