VAKUM DONDURMA VE VAKUM TAM


18

Birisi VACUUMPostgreSQL bu tür arasındaki farkı açıklayabilir ?

Ben dokümanı okudum ama sadece FULLtabloları kilitler FREEZEve tuples "dondurur" diyor . Bence bu aynı. Yanlış mıyım?


Dokümanı okudun mu? Bu, okuduklarınıza bir bağlantı eklemek için mükemmel bir fırsat olurdu ...
Erwin Brandstetter

Yanıtlar:


12

İş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.


Peki, VACUUM FREEZEmasada ö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 ...
Parthian Shot

Vakum donmaz, vakum dolu olmaz.
Scott Marlowe

6

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 FREEZEgereken 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 FREEZEitibaren kullanımdan kaldırılmıştır ve kullanılmamalıdır. Bunun yerine parametreler vardır vacuum_freeze_table_ageve autovacuum_freeze_max_agetabloda tam bir tarama yapılmadan önce kaç işlemin gerçekleşebileceğini belirtir ( VACUUM FREEZEtablo üzerinde dahili olarak etkili bir şekilde yapın ).


3
Belgelerin VACUUM FREEZEkullanımdan kaldırıldığından / caydırıldığından nasıl bahsedilmiyor ?
dezso

İlginç. 8.2 ve 9.0 arasındaki sürümler için yaptı. Belki de, sahip olmaları iyi bir özellik olabileceğinden, kullanımdan kaldırıldılar.
Jimmy Stenke

1

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.


2
Soru VACUUM FREEZEözellikle soruyor .
Erwin Brandstetter

Doğru - "PostgreSQL bu Vakum türleri arasındaki fark" - Ben soru vakum türleri arasındaki farklar hakkında olduğunu düşündüm.
Jayadevan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.