PostgreSQL: TRUNCATE sonrasında disk alanı serbest bırakılmadı


12

Ben var TRUNCATEdenilen büyük (~ 120 GB) tablo d files:

TRUNCATE files;
VACUUM FULL files;

Tablo boyutu 0, ancak disk alanı serbest bırakılmadı. Kayıp disk alanımı nasıl geri kazanacağım hakkında bir fikrin var mı?

GÜNCELLEME: Disk alanı ~ 12 saat sonra, herhangi bir işlem yapmadan serbest bırakıldı. Ubuntu 8.04 sunucusunu kullanıyorum.


"Vakum ver!" bir).
Denis de Bernardy

Bu bağlantı ( postgresql.1045698.n5.nabble.com/… ) size herhangi bir tavsiye veriyor mu? Belki hala masaya veya benzeri bir şeye erişen bir şey vardır.
DrColossos

@DrColossos: Kaynakta bir yorum okudum (şu anda bulamadığım bir yorum), PostgreSQL'in bir kesmenin gerçekleşmek üzere olduğu tüm bağlantıları bildirdiğini ve gerekli kaynakları kilitlediğini söyledi. (Tablonun kendisi, dizinleri, dizileri ve tost tabloları da dahil olmak üzere birkaç vardır.) Ben daha önce ExecuteTruncate () ile izleyerek yorum buldum eminim, ama bu konuda% 100 olumlu değilim.
Mike Sherrill 'Cat Recall'

Yanıtlar:


12

Kaynaktaki yorumlara göre , truncateyeni, boş bir depolama dosyası oluşturur ve işlem sırasında eski depolama dosyasını siler. (Dokümanlar, "depolama dosyası" nın işletim sistemi açısından sadece bir dosya olduğunu öne sürüyor, ancak terminolojiyi yanlış anlıyor olabilirim.)

İlişki için yeni bir boş depolama dosyası oluşturun ve dosyayı relfilenode değeri olarak atayın. Eski depolama dosyasının işleme sırasında silinmesi planlanmıştır.

Bir dosyayı siliyor gibi göründüğünden, temel işletim sisteminin bu alanı hemen boşaltmayabileceği bazı durumlar hayal edebiliyorum. Bazı durumlarda depolama dosyasının Windows altındaki Geri Dönüşüm Kutusu'na girebileceğini hayal ediyorum. Ama benim durumumda, PostgreSQL 9.something altında bir tabloyu kesmek, Windows altında serbest alanı hemen artırdı.

Kesme de WAL günlüğüne kaydedilir. Bunun ne kadar etkisi olabileceğini bilmiyorum.


2
Başka bir arka uç işleminin hala dosyaya açık bir dosya tanımlayıcısı olması düşünülebilir. Bu tekrar olursa, diğer tüm arka uç süreçlerini sonlandırmayı denerim, sadece bir fark yaratıp yaratmadığını görmek için.
Peter Eisentraut

ExecuteTruncate () bu olamaz emin olmak için okudum eminim. Sonunda eski depolama dosyasını silmek için gerekli kaynakları kilitlemenin bir parçası. Ama bunu kaynağında nerede bulduğumu bilmiyorum. Sadece çevrimiçi olarak göz atıyorum; bu şekilde kaybolmak kolay.
Mike Sherrill 'Cat Recall'
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.