Birisi VACUUM
PostgreSQL bu tür arasındaki farkı açıklayabilir ?
Ben dokümanı okudum ama sadece FULL
tabloları kilitler FREEZE
ve tuples "dondurur" diyor . Bence bu aynı. Yanlış mıyım?
Birisi VACUUM
PostgreSQL bu tür arasındaki farkı açıklayabilir ?
Ben dokümanı okudum ama sadece FULL
tabloları kilitler FREEZE
ve tuples "dondurur" diyor . Bence bu aynı. Yanlış mıyım?
Yanıtlar:
İşte kısa ve öz bir cevap.
Vakum dolu özel bir kilit alır ve masayı boş bloklar içermeyecek şekilde yeniden oluşturur (şimdilik doldurma faktörünün% 100 olduğunu varsayalım).
Vakumlu dondurma, tablonun içeriğini, postgreslere hiç vakumlanması gerekmediğini söyleyen çok özel bir işlem zaman damgası ile işaretler. Bir sonraki güncelleme bu dondurulmuş kimlik kaybolacak.
Örneğin, template0 veritabanı hiçbir zaman değişmediği için dondurulur (varsayılan olarak veritabanına bağlanamazsınız.)
Autovacuum arka plan programı, neyin vakumlanması gerektiğini görmek için bir veritabanını ve tablolarını kontrol eder. Bir tablo vakumda dondurulmuş ve daha sonra hiç güncellenmemişse, otovakum arka plan programı basitçe geçecektir. Ayrıca postgresql'deki "etrafı sarar" koruması da o masaya girmez.
tl; dr dondurma, herhangi bir otovak bakım gerektirmeyen bir tabloyu işaretler. Bir sonraki güncelleme bunu çözecektir.
VACUUM FREEZE
masada özel bir kilit gerektiriyor mu? Gerekir gibi görünüyor, aksi takdirde birdenbire aktif işlemlerden gelen satırları küresel olarak görünür hale getirme riskiyle karşı karşıya kalırsınız. Yanlış anlayabilirim ...
Jayadevan'ın yazdıklarını daha fazla açıklamak için.
Postgres'in işlemlerle çalışma şekli ve görünür verileri takip etme şekli, dahili İşlem Kimlikleri'ni karşılaştırarak olur. Ancak, bu işlemler er ya da geç 32 bitlik bir tamsayı olduğu için etrafta sarılacaklardır ve bu nedenle yeni işlem geçmişte yapılmış gibi görünecektir (ve dolayısıyla yapılmaması gereken bir geçerli işlemde görünecektir), eski işlemler gelecekte yapıldıkları gibi görünecektir (ve gelecek henüz mevcut olmadığından bu veriler artık görünmeyecektir).
Postgres'in bu soruna karşı koymak için yapacağı şey, her zaman her işlemden daha eski olan özel bir işlem kimliğinden muzdarip olacak kadar eski olan her satıra atamaktır. Geçerli işlem kimlikleri 0 ile 2147483647 arasında değişiyorsa, geçerli tüm satırlar için işlem kimliğini -1 olarak ayarlar.
Bununla birlikte, vakum temel olarak yeniden kullanım için boş alanı işaretleyeceğinden, yalnızca değiştirilen veri sayfalarında çalışır.
Yapılması VACUUM FREEZE
gereken temel olarak, değiştirilmiş olsun olmasın tüm sayfalar için işlem kimliğini dondurmaktır, böylece mevcut tüm satırlar tüm yeni işlemler için eski olarak görünecektir.
Ancak, 8.2 sürümünden VACUUM FREEZE
itibaren kullanımdan kaldırılmıştır ve kullanılmamalıdır. Bunun yerine parametreler vardır vacuum_freeze_table_age
ve autovacuum_freeze_max_age
tabloda tam bir tarama yapılmadan önce kaç işlemin gerçekleşebileceğini belirtir ( VACUUM FREEZE
tablo üzerinde dahili olarak etkili bir şekilde yapın ).
VACUUM FREEZE
kullanımdan kaldırıldığından / caydırıldığından nasıl bahsedilmiyor ?
Aynı soruyu sorduğumda cevaptan kopyala / yapıştır - "düzenli vakum yeniden kullanım için boş alanı işaretler ve ilişkinin sonunda boş alanı geri kazanır. Yani boş alan ortada ise vb. sadece yeniden kullanıldı.
vakum dolu, tüm boş alanı geri alan bir ilişkiyi sıkıştırır. Özel bir kilit gerektirir ve bu nedenle genel olarak üretim sistemleri için kötüdür.
DÜZENLİ vakumun amacı, tablolardan alan geri kazanmak değil, daha sonra tekrar kullanılabilir hale getirmektir. FULL vakumunun amacı, boşa harcanan alanı, özel bir kilit ve db performansı pahasına olurken geri kazanmaktır.
Yani, düzenli vakum her şeyi geri kazanmak için tasarlanmadığından, aslında her şeyi geri istemediğine şaşırmamalısınız. Düzenli ve tam vakum arasındaki farkı görmek için denemenizi daha rasgele silme vb. Büyük veri kümelerinde deneyin. "
http://postgresql.1045698.n5.nabble.com/vacuuming-doubt-td5782828.html
Buna eklemek için, vakum dolu aslında tablo için yeni dosyalar oluşturur (mevcut dosyalar 0 boyutuna küçültülmüş olurdu). Böylece OS alanı geri kazanabilir.
VACUUM FREEZE
özellikle soruyor .