PostgreSQL 101: Bu Tabloyu Kim Kullanıyor?

Yıllar süren geliştirme ve kullanım sonrası, değişen geliştiriciler ve veritabanı yöneticileri, eklenen/silinen tablolar, alanlar paketler: Bir de bakmışsınız şemanızın içinde artık kimin kullandığı, hatta kullanılıp kullanılmadığı bilinmeyen tablolarla dolu bir veritabanı ile karşı karşıyasınız.

Çalışıyorsa Bırak Çalışsın!

Popüler ve tehlikeli bir mottodur, özellikle IT sektöründe: Çalışıyorsa bırak çalışsın! Buna karşın sorumluluk sahibi bir veritabanı yöneticisi veya uygulama geliştiricisi olarak inisiyatifi ele alalım ve bakalım şu tabloları kimler kullanıyor, hangi tablolar artık hiç kullanılmıyor.

create temp table tmp_stat_user_tables as select * from pg_stat_user_
   tables;

Belirli bir süre çalışır şekilde bırakalım, sonrasında gidip kontrol edelim bakalım oluşturduğumuz tmp_stat_user_tables tablosunda neler var?

select * from pg_stat_user_tables n
     join tmp_stat_user_tables t
     on n.relid=t.relid
     and (n.seq_scan,n.idx_scan,n.n_tup_ins,n.n_tup_upd,n.n_tup_del) <>
     (t.seq_scan,t.idx_scan,t.n_tup_ins,t.n_tup_upd,t.n_tup_del);

pg_stat_user_tables tablo kullanım istatistiklerini tutan özel bir görünümdür. Kullanım istatistiklerinde tabloların kullanım sayısını (count) kontrol ettiğimizde kullanılan tabloların sayısının değişmiş olduğunu görebiliriz. Geçici tabloyu daha uzun süre çalışır vaziyette bırakırsak uzun dönemde tablo kullanımlarını görmüş ve artık hiç kullanılmayan tablolar için iyi bir aday listesi çıkartmış oluruz. Aday diyozum zira, bu listedeki tablolar genel geçer uygulama veya kullanıcı işlemlerinde değil de raporlarda kullanılıyor olabilir bir kontrol daha yapmanız gerekecektir.

Alternatif olarak, PostgreSQL’e tüm tablo istatistiklerini resetlemesini söylemek de bir yöntem olabilir:

select pg_stat_reset()

Bu durumda tüm tablo kullanımına dair istatistikler sıfırlanacaktır. Dolayısı ile kullanılan tabloları kullanı 0 olmayanlar diyerek bulabilirsiniz.

Günlük Tablo Kullanım Raporu Üretmek

Geçmişe dair tablo kullanım istatistikleri sahibi olmak iyi bir şeydir. Zaman içerisinde kullanım değişikliklerine bakarak şema hakkında karar verebilir, farklı optimizasyonlar uygulayabilirsiniz. Günlük, aylık, yıllık veya yük durumuna göre kullanımı bulmak için saatlik raporlar üretmek mümkündür. Bunun için Linux işletim sisteminin zamanlayıcı görev aracı CRON veya PostgreSQL’in zamanlayıcısı pg_agent kullanılabilir.

Önce bir yedek kopya istatistik tablosu oluşturalım:

create table backup_stat_user_tables as
   select current_timestamp as snaptime, *
   from  pg_stat_user_tables;

Daha önceden oluşturmuş olduğumuz bu backup_stat_user_tables tablosuna sistemin zaman damgalı (timestamped) bir anlık bir görüntüsünü ekleyelim:

INSERT into backup_stat_user_tables
   select current_timestamp as snaptime, *
   from  pg_stat_user_tables;

Bu eklemeyi yukarıda bahsettiğimiz şekilde istediğiniz sıklıkla, günlük, aylık veya saatlik olarak bu tabloya eklerseniz, geçmişe yönelik bir tablo kullanım istatistikleri tablosu oluşturmuş olursunuz.