pg_reorg Nedir?
pg_reorg Nedir?
VACUUM, VACUUM FULL ,CLUSTER yazılarımda postgresql de bloat dataların nasıl temizleneceğinden bahsetmiştim. Bloat dataları temizlerken VACUUM FULL ve CLUSTER ile işlem yapılan tablo ve ya tablolarda exclusive lock olmaktadır. Bunun önüne geçmek için farklı çözümler bulunmaktadır bu çözümlerden birisi de pg_reorg dır. Pgfoundry tarafından geliştirilen pg_reorg ‘ın 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_reorg 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 v e 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_reorg geliştirilmesi şuan için durdurulmuştur. Geliştirilmesi durdurulmasına rağmen bazı firmalar bunu kullanmaya devam etmektedir.
Pg_reorg 2011 sonlarında geliştirilmesi yavaşlayarak durduğundan dolayı projenin devamı niteliğinde olan pg_repack geliştirilmiştir.
Pg_reorg ile ilgili github linki aşağıdaki gibidir.
https://github.com/ossc-db/pg_reorg
https://github.com/ossc-db/pg_reorg