DBAtlas · Veritabanı operasyon atlası

Partition oluştur / böl / at

Oracle

-- RANGE partition ekle
ALTER TABLE satislar ADD PARTITION p2026 VALUES LESS THAN (TO_DATE('2027-01-01','YYYY-MM-DD'));

-- Var olan partition'ı böl
ALTER TABLE satislar SPLIT PARTITION pmax AT (TO_DATE('2027-01-01','YYYY-MM-DD')) INTO (PARTITION p2026, PARTITION pmax);

-- Partition at
ALTER TABLE satislar DROP PARTITION p2020 UPDATE INDEXES;

RANGE/LIST/HASH partition destekler. DROP PARTITION o bölümdeki tüm satırları siler; UPDATE INDEXES ile global index'ler geçerli kalır. Interval partition ile otomatik ekleme yapılabilir.

PostgreSQL

-- Declarative partitioning: ana tablo
CREATE TABLE satislar (id bigint, tarih date, tutar numeric) PARTITION BY RANGE (tarih);

-- Yeni partition ekle
CREATE TABLE satislar_2026 PARTITION OF satislar FOR VALUES FROM ('2026-01-01') TO ('2027-01-01');

-- Bağımsız (var olan) bir tabloyu partition olarak bağla
CREATE TABLE satislar_2027 (LIKE satislar INCLUDING ALL);
ALTER TABLE satislar ATTACH PARTITION satislar_2027 FOR VALUES FROM ('2027-01-01') TO ('2028-01-01');

-- Partition'ı ayır (tablo silinmez, bağımsız tablo olarak kalır)
ALTER TABLE satislar DETACH PARTITION satislar_2026;

Çekirdek PostgreSQL'de SPLIT/MERGE PARTITION yoktur (PG17 itibarıyla); bölmek için partition'ı DETACH edip yeni sınırlarla iki partition oluşturur, veriyi taşıyıp ATTACH edersiniz. DETACH ... CONCURRENTLY (PG14+) lock süresini azaltır.

MySQL

-- Partition'lı tablo
CREATE TABLE satislar (id BIGINT, tarih DATE) PARTITION BY RANGE (YEAR(tarih)) (
  PARTITION p2024 VALUES LESS THAN (2025),
  PARTITION p2025 VALUES LESS THAN (2026),
  PARTITION pmax VALUES LESS THAN MAXVALUE
);

-- Partition ekle / böl / at
ALTER TABLE satislar REORGANIZE PARTITION pmax INTO (
  PARTITION p2026 VALUES LESS THAN (2027),
  PARTITION pmax VALUES LESS THAN MAXVALUE
);
ALTER TABLE satislar DROP PARTITION p2024;

Partition kolonu PRIMARY KEY / UNIQUE anahtarların parçası olmalıdır. RANGE'de bölme/birleştirme REORGANIZE PARTITION ile yapılır. DROP PARTITION satırları da siler (RANGE/LIST).

SQL Server

-- 1) Partition function ve scheme
CREATE PARTITION FUNCTION pf_tarih (date) AS RANGE RIGHT FOR VALUES ('2025-01-01','2026-01-01');
CREATE PARTITION SCHEME ps_tarih AS PARTITION pf_tarih ALL TO ([PRIMARY]);

-- 2) Yeni sınır ekle (böl)
ALTER PARTITION SCHEME ps_tarih NEXT USED [PRIMARY];
ALTER PARTITION FUNCTION pf_tarih() SPLIT RANGE ('2027-01-01');

-- 3) Sınır kaldır (birleştir)
ALTER PARTITION FUNCTION pf_tarih() MERGE RANGE ('2025-01-01');

Partition function + scheme tanımlanır, tablo CREATE TABLE ... ON ps_tarih(tarih) ile bu şemaya kurulur. SPLIT öncesi NEXT USED file group ayarlanmalıdır. Veri atmak için SWITCH PARTITION ile bir staging tabloya taşınır.

MongoDB

// MongoDB'de tablo partition'ı yerine sharding kullanılır
sh.shardCollection("db.satislar", { tarih: 1 });

// Zaman serisi için native time-series koleksiyon
db.createCollection("olcumler", { timeseries: { timeField: "ts", granularity: "hours" } });

Klasik anlamda partition yoktur. Yatay bölme sharding ile chunk'lar üzerinden yapılır; zaman bazlı veride time-series koleksiyonlar otomatik bucket'lama sağlar.

Redis

# Uygulanamaz: Redis'te tablo/partition kavramı yoktur; ölçekleme Redis Cluster hash slot'ları (16384) ile yapılır.

Redis Cluster anahtarları 16384 hash slot'a dağıtır; bu uygulama düzeyinde bölmedir, tablo partition'ı değildir. Manuel partition komutu yoktur.

Elasticsearch

# ILM politikası + data stream ile zaman bazlı otomatik bölme (rollover)
PUT _ilm/policy/loglar-policy
{ "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "50gb", "max_age": "30d" } } } } } }

PUT _index_template/loglar-tmpl
{ "index_patterns": ["loglar*"], "data_stream": {}, "template": { "settings": { "index.lifecycle.name": "loglar-policy" } } }

Elasticsearch'te bölme, index'in shard'lara ayrılması ve zaman serisi için ILM + data stream (rollover) ile yeni backing index oluşturulmasıyla sağlanır. Eski index'ler ILM ile silinebilir.

DBAtlas'ta aç →