İlk ölçek sorunu çoğu zaman bağlantıdır
PostgreSQL her bağlantı için kaynak tüketir. Uygulama pod sayısı arttığında, her pod kendi havuzunu açtığında ve arka plan workerları da aynı veritabanına bağlandığında bağlantı sayısı hızla büyür.
Bu durumda daha büyük makine almak kısa süre rahatlatabilir ama kök sorunu çözmez. PgBouncer veya doğru uygulama pool ayarı, PostgreSQL ölçeklenebilirliğinin ilk basamağıdır.
Bağlantı baskısını okuma
select state, count(*) from pg_stat_activity group by state order by count(*) desc; select datname, numbackends from pg_stat_database order by numbackends desc;
Read replica okuma yükü için iyidir, yazmayı büyütmez
Read replica, rapor, listeleme, dashboard veya read-only API trafiğini primary üzerinden almak için yararlıdır. Ama yazma yükünüz primary üzerinde kalır. Sipariş yazma, ödeme kaydı, stok güncelleme gibi işlemler replica ile büyümez.
Ayrıca replika gecikmesi ürün davranışını etkiler. Kullanıcı sipariş verdikten hemen sonra siparişini read replica üzerinden okumaya çalışıyorsa eski veri görebilir. Bu nedenle read-after-write beklentisi olan akışlar dikkatle ayrılmalıdır.
- Raporlama ve ağır okuma replica için iyi adaydır.
- Kritik son yazıyı hemen okuyan akışlar primaryden okumalıdır.
- Replica lag metrikleri kullanıcı deneyimiyle birlikte izlenmelidir.
- Replica, kötü sorguyu otomatik iyi sorguya dönüştürmez.
Partitioning büyüyen tabloyu yönetmek içindir
Partitioning çoğu zaman performans sihri gibi görülür. Asıl gücü, büyüyen tabloyu yönetilebilir fiziksel parçalara ayırmasıdır. Tarih aralığıyla sorgulanan event, ödeme hareketi veya log tablolarında işe yarayabilir.
Sorgular partition anahtarını kullanmıyorsa PostgreSQL yine çok fazla partition gezebilir. Bu yüzden partitioning, sorgu deseni ve veri yaşam döngüsüyle birlikte tasarlanmalıdır.
Kullanım örneği: SaaS ürününde büyüyen orders tablosu
SaaS ürününde orders tablosu her tenant için büyüyor olsun. İlk adım tenant_id ve created_at filtrelerini doğru indekslemektir. Listeleme sorguları hâlâ ağırsa pagination ve sorgu planı incelenir. Eski veri nadiren okunuyorsa tarih bazlı partitioning veya arşivleme gündeme gelir.
Ağır raporlar aynı primary üzerinde çalışıyorsa read replica veya ClickHouse’a event aktarımı daha sağlıklı olabilir. Böylece OLTP veritabanı sipariş yazmaya odaklanır.