PostgreSQL Vacuum

PostgreSQL Vacuum,Postgres üzerinde bir tablo da update ve delete işlemleri yapıldığında değiştirilen(update) veya silinen(delete) datalar tutulur. Örneğin siz bir tablo da update işlemi yaptığınız da güncelleyeceğiniz data gizlenir ve yeni değeri insert edilir. Delete işleminde ise silinmek istenen tablo silindi olarak işaretlenir  ilgili kayıt gizlenir ama disk üzerinden silinmez.

Update işleminde ise update edilmek istenen kaydı kullanılmaması için gizler ve yeni değeri tabloya insert edilir fakat gizlenen data disk üzerinde durur. Bu disk üzerinde eski dataların kalmasına da “dead rows” denir.

Dead row kavramından bahsettik bu dead rowların vacuum ile ne ilgisi olduğundan bahsedelim. Dead rowlar kaldığı sürece  disk üzerinde gereksiz  alan  kaplar  ve bundan dolayı sorgularımızda bu dead rowlar da taranacağından dolayı sorgu süresi ve costları artacaktır. Bunlar belirli periyodlarla vacuum yapılarak boşaltılır ve gereksiz taramanın ve gereksiz costun önüne geçilmiş olur.

VACUUM

Dead rowlardan yukarıda bahsetmiştim. Vacuum işlemi dead rowlar’ın tekrar kullanılabilmesi için  işaretlemeleri yapar. İşaretlemeler yapılırken exclusive lock konulmadığı için işlemler yapılabilir. Bu işlem sırasında dead rowlar fazla silinmez ve bundan dolayı disk boyutundan fazla  kazanç elde edilmez. Dead Rowları yeniden kullanılacak halde hazır tutulmasını sağlar.  AUTOVACUUM özelliği ile  otomatik şekilde yapılabilir.

ANALYZE

VACUUM ANALYZE= VACUUM+ANALYZE

Sorgular çalıştırılırken kendilerine sorgu başladığında başlayan ve bittiğinde biten ,sorguyu en hızlı yoldan getirmek için yaşam döngüsü oluştururlar ve bu yaşam döngüsüne postgresql tarafında planner   denilir.  ANALYZE komutu ile bütün tablo da ya da sadece ilgili tabloda istatistikleri güncelleyebilirsiniz.

VACUM ANALYZE , tabloda silinen ,güncellenen datalar ile işlem yapılmaması için ilgili tabloların istatistiklerini güncelleyerek sorguların kısa sürede  gelmesini ve ilgili dead rowları temizlemeyi sağlar.

Bu işlem tabloda read lock a neden olabilir.

VACUM FULL

Vacum full komutu çalıştırıldığı tablo da exclusive lock’a(vacuum full işlemi tamamlanana kadar işlem yaptırılmaması)  neden olur .  Diğerlerinden farklı olarak çalıştırıldığı tablo ya da veritabanındaki deadrowlar temizlenir ve  istatistikler güncellenir. Bundan dolayı diğer vacuum çeşitlerinden daha fazla yer ve performans kazancı elde etmenize imkan tanır.

VACUUM işlemlerinde VERBOSE komutu ile VACUUM sırasında yapılan işlemler hakkında çıktı alabilirsiniz.

Vacuum işlemleri ile tablonun fiziksel olarak tutulan fsm ve vm dosyaları temizlenir.

 

Fsm : free space mapping olarak geçmektedir . Tablonuzdaki boş kayıtlar burada tutularak yeni bir veri geldiğinde fsm üzerinden belirlenerek yazma işlemi yapılır. Fsm üzerinde yer varsa fsm’e yok ise yeni bir page yazılır. Aşağıdaki sorgu ile fsm ile ilgili daha detaylı bilgi edinebilirsiniz.

Select*from pg_freespace(tablo_adi)

 

Vm : Visibility mapping update delete işlemlerinde değiştirilerek hangi datanın görülür veya  görünemez olduğu bilgisi tutulur. Aşağıdaki sorgu ile vm ile ilgili daha detaylı bilgi edinebilirsiniz.

 

Select*from pg_visibilty(tablo_adi)

 

Tabloların ne zaman analyze,autovacuum yaptığı bilgilerini aşağıdaki sorgu ile görebilirsiniz.

SELECT relname,last_vacuum, last_autovacuum, last_analyze, last_autoanalyze FROM pg_stat_user_tables;

Postgresql.conf içerisinde autovacuum ile ilgili parametreleri detaylıca öğrenmek isterseniz Postgresql Tablo AutoVacuum Parametreleri yazıma göz atabilirsiniz.

 

 

 

Loading