PostgreSQL pg_repack nedir ?

Bu gün sizlerle PostgreSQL de VACUUM FULL yerine kullanabileceğimiz güzel bir extension ‘ı tanıtacağım. Prod ortamlarınızda kullanmanızı tavsiye ederim.

VACUUM FULL komutu, normal VACUUM komutundan farklı olarak tüm tabloyu baştan yazar. Dolayısıyla, diskinizde yeni tabloyu yazacak kadar yer olduğuna emin olmalısınız. VACUUM FULL, işlem yaptığı her tabloda ACCESS EXCLUSIVE lock ister. VACUUM FULL tabloyu kilitledikten sonra, işlem bitene kadar o tabloda herhangi bir işlem yapılamaz. Eğer bu komuta tablo adı parametresini vermezseniz, veritabanındaki tüm tablolar VACUUM FULL yapılır.

VACUUM FULL ‘un başlaması için tablonun kilitlenebilir olması gereklidir. Yani eğer başka bir işlem (transaction), ACCESS SHARE lock ile olsa bile tabloyu kilitlemişse, VACUUM FULL diğer tabloları kilitleyip bu tablodaki kilitlerin boşalmasını bekleyecektir. Bu da bazı durumlarda sonsuza kadar
kilitlenen tablolar ile sonuçlanacaktır.

Yoğun sistemlerimizde bu kadar yüklü Lock oluşturan Vacuum Full ‘ü kullanmamız çok zor ve riskli. İşte bu durumda Vacuum Full ‘ün yerine pg_repack extentsion ‘ını kullanabilirsiniz. Pg_Repack extension ‘ını kullanabilmek için iki gereklilik mevcut. Bunlardan ilki sadece superuser olan kullanıcılar bu extension ‘ı kullanabilir. Diğeri ise tabloda PRIMARY KEY olması ya da tabloda Null olmayan bir kolon üzerinde Unique Index olması gerekmektedir.

Şimdi pg_repack kurulumumuzu yapalım. (PostgreSQL 11 verisyonuna kurulum yapacağımız için pg_repack11 i indiriyoruz.)

yum install pg_repack11

Daha sonra Extension ‘ı Create ediyoruz psql ‘e geçerek.

CREATE EXTENSION pg_repack;

Şimdi ise pagila veritabanında ki tüm tabloları repack edelim.

-bash-4.2$ /usr/pgsql-11/bin/pg_repack pagila

Pagila da ki tüm tabloları repack işlemine soktuk eğer biz sadece rental tablosunu repack yapmak isteseydik nasıl bir komut çalıştıracaktık ?

/usr/pgsql-11/bin/pg_repack pagila -t "public.rental"

-t komutu ile repack yapacağımız tabloyu belirtebiliyoruz.

–help komutuyla repack de kullanılacak diğer parametreleri de görebilirsiniz.

/usr/pgsql-11/bin/pg_repack --help  

NOT : Büyük tablolarda birden fazla worker kullanmak istediğiniz de -j parametresi ile worker sayınızı girip paralel worker çalıştırabilirsiniz.

Teşekkürler.

Leave a Reply

Your email address will not be published. Required fields are marked *