VACUUM FULL Faydaları

Vacuum Full tavsiye edilmiyor çünkü lock alıp tabloyu kullanılmaz hale getirdiği için fakaat olanak olduğu zaman kullanılması gerektiğini düşünüyorum. Bir örnekle de bunu açıklamaya çalışacağım.

  • iki tablo olsun ( a ve b )
  • ikisinde de sadece id kolonu, integer değer ve random sayılar
  • 200.000 satırlı ikiside

b tablosunda epey update işlemi yaptırmıştım, şişti ve vacuum yaptığımda eskisi gibi olmadı.

Aşağıda a ile b tablosu arasındaki fark zaman zaman daha fazla olabiliyor.

travegodb=# select * from b;  
Time: 122.781 ms  
travegodb=# select * from a;  
Time: 90.784 ms  
travegodb=# VACUUM FULL VERBOSE ANALYZE b;  
INFO:  vacuuming “public.b”  
INFO:  “b”: found 0 removable, 200000 nonremovable row versions in 34514 pages  
DETAIL:  0 dead row versions cannot be removed yet.  
CPU 0.05s/0.08u sec elapsed 0.37 sec.  
INFO:  analyzing “public.b”  
INFO:  “b”: scanned 885 of 885 pages, containing 200000 live rows and 0 dead rows; 30000 rows in sample, 200000 estimated total rows  
VACUUM  
Time: 1108.535 ms  
travegodb=# select * from b;  
Time: 62.682 ms  
travegodb=# select * from a;  
Time: 86.399 ms  

VACUUM FULL yaptığımda ise herşey düzelmiş oldu.

Not: Geçenlerde bi tablo yine şişmişti base klasör 940 mb civarına cıkmıştı. VACUUM yaptım 480 mb civarına indi ardından VACUUM FULL ile 170 mb’a kadar düştü. AMA! VACUUM FULL yapmak yerine veritabanını düşürüp yeniden yaratmanın daha hızlı olduğunu tavsiye edenler var.

Erkin Çakar

PostgreSQL DBA & Software developer