▸1. PostgreSQL 18 Neden Kurumsal Amiral Gemisidir?
PostgreSQL 18, 2025 yılı sonbaharında yayımlanan ve 2030 yılına kadar tam 5 yıl boyunca desteklenecek olan mevcut en kararlı ana akım GA sürümüdür. PostgreSQL 17'deki Radix-tree TidStore devriminin üzerine inşa edilen sürüm, özellikle büyük ölçekli depolama ve partition mimarilerine odaklanır.
#### A. Direct I/O (O_DIRECT) Mimarisi Geleneksel PostgreSQL mimarisinde veriler önce Linux OS Page Cache'te, ardından shared_buffers içinde tutulurdu. Bu durum "Double-Buffering" olarak bilinir ve RAM'in mükerrer kullanılmasına yol açardı. PostgreSQL 18 ile birlikte io_direct parametresi resmi olarak tanıtıldı:
# postgresql.conf (PostgreSQL 18 Direct I/O)
io_direct = 'data,wal' # Tablo verileri ve WAL yazımlarında OS cache baypas edilir
shared_buffers = 128GB # Sunucu RAM'inin %60-70'i doğrudan PostgreSQL'e verilir- •Fayda: İşletim sisteminin
kswapdveya dirty page flush kilitlenmeleri (page writeback stalls) ortadan kalkar; I/O gecikmeleri deterministik hale gelir.
▸2. Büyük Bölümlemeli (Partitioning) Tablolarda Performans
Yüzlerce gün veya aya bölünmüş dev tablolarda sorgu planlama süresi (planning time), sorgu yürütme süresinden daha uzun sürebiliyordu. PostgreSQL 18'de partition arama motoru hash tabanlı O(1) budama yapısına kavuşturuldu:
-- Milyarlarca satırlık zaman serisi tablosu
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM telemetri_loglari
WHERE kayit_tarihi >= '2026-10-01' AND kayit_tarihi < '2026-10-02';- •Sonuç: 1.000+ bölümlü tablolarda planlama süresi 150 ms'den 2 ms'ye geriledi.
▸3. Autovacuum Çoklu İndeks Paralelliği
Tek bir tabloda 10'dan fazla indeks bulunduğunda, VACUUM süreci her bir indeksi sırayla tarardı. PostgreSQL 18 ile birlikte Autovacuum iş parçacıkları birden fazla indeksi paralel işçilere bölüştürür:
# postgresql.conf
max_parallel_maintenance_workers = 4
autovacuum_max_workers = 6- •Kıdemli DBA Tavsiyesi: Geniş tablolar üzerindeki bloat temizleme süresi %60 oranında kısalmıştır; tablo kilit süreleri minimize edilmiştir.
▸4. PG 16/17'den PG 18'e Sıfır Kesintili Yükseltme
# 1. Ön Kontrol (Dry Run)
/usr/lib/postgresql/18/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/17/main \
--new-datadir=/var/lib/postgresql/18/main \
--old-bindir=/usr/lib/postgresql/17/bin \
--new-bindir=/usr/lib/postgresql/18/bin \
--check
# 2. Hard-Link ile saniyeler içinde geçiş
/usr/lib/postgresql/18/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/17/main \
--new-datadir=/var/lib/postgresql/18/main \
--old-bindir=/usr/lib/postgresql/17/bin \
--new-bindir=/usr/lib/postgresql/18/bin \
--link