MVCC ve Şişkinliğin Nedenleri
Çok sürümlü eşzamanlılık denetimini, ölü demetlerin neden biriktiğini ve uzun işlemlerin şişkinliğe nasıl yol açtığını anlayın.
MVCC ve Şişkinliğin Nedenleri, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
MVCC Nedir?
Çok Sürümlü Eşzamanlılık Denetimi. PostgreSQL, kilitleme yerine bir satırın birden çok sürümünü tutar. Okuyucular tutarlı bir anlık görüntü görür; yazıcılar da okuyucuları engellemeden yeni sürümler oluşturur.
UPDATE Nasıl Çalışır?
UPDATE, satırı yerinde değiştirmez:
- Eski satır sürümünü işlem T'de "ölü" olarak işaretler
- Yeni bir sürüm yazar
- Diğer işlemler, anlık görüntülerinin izin verdiği sürümü görür
Şişme Neden Oluşur?
Ölü sürümler birikir. Satır sayısı sabit kalsa bile tablo büyür. Temizleme yapılmazsa sorgular giderek daha fazla ölü satır tarar.
VACUUM Ne Zaman Alan Kazandırır?
VACUUM, ölü satırları yeniden kullanılabilir olarak işaretler (tablo dosyası içinde). Dosyaları, yalnızca sonunda tamamen boşlarsa küçültür. VACUUM FULL tabloyu yeniden yazar — özel kilit alır ve yavaştır.
Autovacuum
PostgreSQL, arka planda autovacuum çalıştırır. Ölü satırların sayısı bir eşiği aştığında tetiklenir:
autovacuum_vacuum_threshold = 50
autovacuum_vacuum_scale_factor = 0.2
-- vacuum when dead_rows > 50 + 0.2 * total_rowsŞişmeye Neden Olan İş Yükleri
- Küçük / HOT tablolarda yoğun UPDATE trafiği
- Büyük DELETE toplu işlemleri (alanı boşaltmak için vacuum gerekir)
- Uzun süren işlemler vacuum'u engeller (anlık görüntüleri tutarlar)
- İşlem içindeki boşta oturumlar yoğun tablolarda ölü satır birikmesine neden olur
Şişmeyi Tanılama
pgstattuple eklentisi kesin değerler sağlar:
CREATE EXTENSION pgstattuple;
SELECT * FROM pgstattuple('orders');
-- table_len, tuple_count, dead_tuple_count, free_space, etc.
SELECT * FROM pgstatindex('orders_user_id_idx');Uzun İşlemler Vacuum'u Engeller
VACUUM yalnızca en eski etkin işlemden daha eski satırları temizleyebilir. İşlem içinde 4 saat boyunca boşta kalan bir oturum, 4 saat boyunca geri alınmamış ölü satır anlamına gelir.
SELECT pid, state, xact_start, NOW() - xact_start AS duration
FROM pg_stat_activity
WHERE state IN ('active', 'idle in transaction')
ORDER BY duration DESC NULLS LAST;Devir Aşımı Koruması
İşlem kimlikleri 32 bit'tir. Autovacuum yetişemezse küme "devir aşımı" ile karşılaşır ve güvenlik moduna geçer (zorunlu VACUUM). Şunları izleyin:
SELECT datname, age(datfrozenxid) FROM pg_database
ORDER BY age(datfrozenxid) DESC;Mantıksal Silme ≠ Fiziksel Silme
DELETE, satırları ölü olarak işaretler; alan yalnızca VACUUM tarafından geri alınabilir. Vacuum çalıştırılmadan yapılan toplu DELETE işlemleri, geride büyük ölü satır havuzları bırakır.
HOT Güncellemeleri
Yalnızca dizinlenmemiş sütunları güncellerseniz ve aynı sayfada boş bir yer varsa PostgreSQL, HOT (Heap-Only Tuple) güncellemesi yapar — dizin değiştirilmez ve şişme azalır.
Şişmeyi Azaltma
- İşlemleri kısa tutun
- Dizinlenmiş sütunlarda geniş UPDATE işlemlerinden kaçının (HOT devreye giremez)
- Yoğun kullanılan tablolarda otomatik VACUUM'u agresif biçimde ayarlayın
- Uzun süreli kilitler olmadan yeniden yazmak için pg_repack kullanın
Özet
MVCC, ölü satırların birikmesi pahasına eşzamanlılığı mümkün kılar.
- VACUUM ölü satırları temizler
- Otomatik VACUUM zorunludur — devre dışı bırakmayın
- Uzun işlemler temizlemeyi engeller
- pgstattuple ile teşhis edin
Kısa Kontrol
Yalnızca bir sütun değiştiğinde bile UPDATE tabloyu neden küçültmez?
Sıkça Sorulan Sorular
“MVCC ve Şişkinliğin Nedenleri” dersi ücretsiz mi?
Evet — “MVCC ve Şişkinliğin Nedenleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“MVCC ve Şişkinliğin Nedenleri” dersinde ne öğreneceğim?
Çok sürümlü eşzamanlılık denetimini, ölü demetlerin neden biriktiğini ve uzun işlemlerin şişkinliğe nasıl yol açtığını anlayın. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“MVCC ve Şişkinliğin Nedenleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- MVCC ve Şişkinliğin Nedenleri
- VACUUM, autovacuum, vacuum_cost_delay
- ANALYZE ve pg_statistic
- Yalnızca INDEX Taramaları ve Görünürlük Haritası