DBOS ekibi Postgres DELETE komutunu ölçeklemenin yöntemini açıkladı
Öne çıkanlar
- ON DELETE CASCADE kuralı önbellek yerelliğini bozduğu için yabancı anahtarlar tablolardan kaldırıldı.
- İndekslerde biriken ölü satırların yol açtığı 20 dakikalık gecikme manuel VACUUM komutlarıyla çözüldü.
- Bölüm silme yöntemi yerine optimize edilen toplu DELETE yaklaşımı silme hızını 10 kat artırdı.
DBOS mühendisleri, saniyede on binlerce işlem yürüten iş akışı sistemlerinde Postgres DELETE işlemlerini ölçeklemek için uyguladıkları yöntemleri duyurdu. Yüksek performanslı birçok sistem, çok sürümlü eşzamanlılık denetimi (MVCC) nedeniyle oluşan ölü satır yükünden kaçınmak için bölümleri silme yoluna gidiyor. Ancak farklı yaşam sürelerine sahip heterojen iş akışlarında bu yöntem uzun süren işlemlerin temizliği engellemesine neden oluyor.
Ekip, performans sorununu çözmek için basamaklı silme (ON DELETE CASCADE) mekanizması içeren yabancı anahtar (foreign key) bağımlılıklarını kaldırdı. Farklı zamanlarda oluşturulan adımların disk üzerinde dağınık sayfalara yazılması, her silme işleminde önbellek yerelliğini bozarak sistemi yavaşlatıyordu. Yabancı anahtarlar kaldırıldıktan sonra ana kayıtlar ve ilişkili alt tablolar, oluşturulma sıralarına göre bağımsız yığınlar halinde silinmeye başlandı.
İndeks taramalarında ortaya çıkan 20 dakikalık kilitlenmeleri çözmek için silme aşamalarının öncesine ve sonrasına manuel VACUUM komutu eklendi. İndeks kayıtlarının ölü satırları doğrudan işaretlememesi yüzünden oluşan tarama maliyeti bu adımla bertaraf edildi. Ekip, yabancı anahtarları kaldırıp manuel temizlik uygulayarak veri saklama operasyonlarındaki silme performansını 10 kat artırdı.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.