dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Sürüm Analizleri/postgresql-18
18.6Major Production Release (Destek: Kasım 2030) · Eylül 2025 GA (Son Yama 18.6: 13 Ağustos 2026)9 dk okuma

PostgreSQL 18 DBA Sürüm Analizi: Direct I/O Altyapısı, Partition Budama Hızlandırmaları ve Çoklu İndeks Paralel Vacuum

İşletim Sistemi Page Cache Baypas Seçeneği, Milyonlarca Bölümde Sıfır Planlayıcı Gecikmesi ve Autovacuum Verimliliği (v18.6)

Kıdemli DBA Özet Değerlendirmesi
Direct I/O (O_DIRECT) Desteği

İşletim sistemi sayfa önbelleğini (page cache) atlayarak double-buffering sorununu önler; bellek yönetimini tamamen shared_buffers üzerinde merkezileştirir.

⚠ Özellikle yüksek bellekli (>256 GB RAM) ve NVMe depolamalı sunucularda I/O tutarlılığını artırır.
Büyük Tablolarda Hızlı Partition Budama

Yüzlerce ve binlerce alt bölüme sahip (sub-partition) tablolarda sorgu planlama süresi O(N)'den hash tabanlı O(1) indeks aramasına indirgendi.

⚠ Büyük zaman serisi veya çoklu kiracılı (multi-tenant) veri ambarlarında sorgu gecikmelerini düşürür.
Çoklu İndeks Paralel Vacuum

Autovacuum işçileri, tek bir tablodaki birden fazla B-Tree indeksini eşzamanlı olarak tarayabilir ve temizleyebilir.

⚠ Geniş indeksli dev tablolarda vacuum süresini saatlerden dakikalara indirir.

▸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ı:

ini
# 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 kswapd veya 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:

sql
-- 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:

ini
# 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

bash
# 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