pg_squeeze

Pg_squeeze cybertec tarafından geliştirilmiş açık kaynak kodlu vacuum alternatfilerinden birisidir.

Pg_squeeze, postgresql içerisinde bulunan vacuum full ve cluster gibi araçlar kullanılırken sistemde uzun süreli locklara neden olduğundan dolayı geliştirilen bir araçtır.

Pg_squeeze bir tabloda çalıştırıldığında işlem yapılan tabloda işlem sırasında gelecek olan insert,update ve delete gibi işlemler için bir tablo oluşturur.  Orijinal tabloda bir  trigger oluşturarak bu oluşturulan tabloya işlem sırasında gelen insert,update,delete işlemlerini yazar. Bu sayede Pg_squeeze komutu çalıştırıldığında ilgili tabloda lock’ın önüne geçilmiş olur fakat bunla bitmez sadece eski tablodaki tüm sütunları ve dataları içeren yeni bir tablo oluşturulur ve eski tabloda ki indekslerde  oluşturulur.  Yeni tablo index ve dataları ile beraber oluşturulduktan sonra işlem sırasında gelen insert,update,delete  işlemlerinin tutulduğu tablo yeni tablo ile birleştirilerek işlem tamamlanır . Sistem tabloları ve viewleri de kullanılarak gerekli kontroller tamamlandıktan sonra   eski tablo silinerek yeni tablo rename yapılır ve işlem en az lock ile tamamlanmış olur.

Pg_squeeze diğer vacuum alternatiflerinden farklı olarak postgresql içerisinde ki functionlar ile tetiklenebilmektedir.

Kurulum için ilk olarak aşağıdaki şekilde dosyayı indiriyoruz.

 

git clone https://github.com/cybertec-postgresql/pg_squeeze.git

İndirdiğiniz dizin içerisinde ki pg_squeeze dosyasının içerisine girerek aşağıdaki komutları sırayla çalıştırıyoruz.

Make

Make install

Yukarıdaki komutları çalıştırdıktan sonra aşağıdaki gibi postgresql.conf üzerinden değişiklikleri yapmamız gerekiyor.

wal_level = logical

max_replication_slots = 1

shared_preload_libraries = 'pg_squeeze' 

 

Yukarıdaki parametreleri değiştirdikten sonra  servisi aşağdaki şekilde restart ediyoruz

Systemctl status postgresql-13

Servisimizi restart ettikten sonra çalışma yapılacak veritabanına bağlanarak extension’ı oluşturuyoruz.

Create extension pg_squeeze;

Extension oluşturulduktan sonra  aşağıdaki gibi tabloda vacuum işlemi yapabilirsiniz.

SELECT squeeze.squeeze_table('public', 'indextabled1', null, null, null);

Otomatik vacuum işlemi için aşağıdaki parametreleri postgresql.conf a ekleyerek faydalanabilirsiniz.

squeeze.worker_autostart = 'işlemyapılmakistenen veritabanı'
squeeze.worker_role = postgres

Yukarıdaki işlemler yapıldıktan sonra aşağıdaki gibi autovacuumu başlatabilirsiniz.

SELECT squeeze.start_worker();

Yukarıdaki parametre ile  background worker  parametresinde belirtilen parametre ile belirli periyodlar da vacuum işlemi yapılır.

Aşağıdaki parametre yardımı ile autovacuumu kapatabilirsiniz.

SELECT squeeze.stop_worker();

 

Loading