DBAtlas · Veritabanı operasyon atlası

Sonuç / sorgu önbelleği kullan

Oracle

-- Sorgu düzeyinde sonuç önbelleği:
SELECT /*+ RESULT_CACHE */ il, COUNT(*) FROM musteri GROUP BY il;
-- Genel mod: ALTER SYSTEM SET result_cache_mode = FORCE;

Server Result Cache sonucu SGA'da tutar; temel tablolar değişince otomatik geçersiz kılınır. RESULT_CACHE_MODE=FORCE tüm uygun sorgulara uygular, MANUAL yalnız hint ile. Sık değişen tablolarda faydası azdır.

PostgreSQL

-- Yerleşik sonuç önbelleği yoktur.
-- Materialized view ile önceden hesapla:
CREATE MATERIALIZED VIEW mv_il_ozet AS
  SELECT il, COUNT(*) FROM musteri GROUP BY il;
REFRESH MATERIALIZED VIEW mv_il_ozet;

PostgreSQL sorgu sonucu önbelleği sunmaz; materialized view (elle/planlı REFRESH) veya uygulama katmanı önbelleği (Redis) kullanılır. Not: Memoize düğümü nested loop içinde satır düzeyi önbellek sağlar, sorgu sonucu değil.

MySQL

-- Query Cache MySQL 8.0'da KALDIRILDI.
-- Alternatif: materyalize özet tablo veya uygulama önbelleği:
CREATE TABLE il_ozet AS SELECT il, COUNT(*) c FROM musteri GROUP BY il;

Eski query_cache_type MySQL 8.0 ile tamamen kaldırıldı (ölçeklenme sorunları nedeniyle). Yerine InnoDB buffer pool, özet tablolar veya harici önbellek (Redis/Memcached) kullanın.

SQL Server

-- Yerleşik sorgu sonucu önbelleği yoktur.
-- Indexed (materialized) view ile önceden hesapla:
CREATE VIEW dbo.vw_il_ozet WITH SCHEMABINDING AS
  SELECT il, COUNT_BIG(*) c FROM dbo.musteri GROUP BY il;
CREATE UNIQUE CLUSTERED INDEX ix ON dbo.vw_il_ozet(il);

SQL Server sonuç önbelleği tutmaz (plan önbelleği tutar). Tekrarlı toplamalar için indexed view otomatik güncellenir; planlarda otomatik eşleştirme yalnızca Enterprise (ve Developer) sürümündedir, Standard'da view WITH (NOEXPAND) hint'iyle sorgulanmalıdır; ayrıca buffer pool sık okunan sayfaları bellekte tutar.

MongoDB

// Yerleşik sorgu sonucu önbelleği yoktur.
// Önceden toplayıp koleksiyona yaz ($merge):
db.satis.aggregate([
  { $group: { _id: "$il", t: { $sum: "$tutar" } } },
  { $merge: "il_ozet" }
])

MongoDB sonuç önbelleği sunmaz; WiredTiger sık erişilen veriyi bellekte tutar. Pahalı toplamalar için $merge/$out ile önceden hesaplanmış özet koleksiyon veya uygulama önbelleği (Redis) kullanın.

Redis

# Redis zaten bir önbellek katmanıdır; sonucu elle önbelleğe alın:
SET sorgu:il_ozet "{...}" EX 300
GET sorgu:il_ozet
# Hesaplanmışsa GET ile döndür, yoksa hesaplayıp SET ile yaz.

Yaygın cache-aside deseni: anahtar varsa GET ile hızlı döndür; yoksa kaynaktan hesaplayıp EX (TTL) ile SET yap. Redis genellikle diğer veritabanları için sonuç önbelleği görevi görür.

Elasticsearch

# Shard request cache (varsayılan olarak size:0 toplamalarda etkin):
GET <index>/_search?request_cache=true
{ "size": 0, "aggs": { "il": { "terms": { "field": "il" } } } }
# Ayar: PUT <index>/_settings { "index.requests.cache.enable": true }

Shard request cache, size:0 (yalnız toplama) isteklerinin shard başına sonuçlarını önbelleğe alır; index tazelenince (refresh) geçersiz kılınır. size>0 (hit döndüren) sorgular varsayılan olarak önbelleğe alınmaz.

DBAtlas'ta aç →