PostgreSQL Bakım
PostgreSQL işlemlerini hızlandırmak, performans arttırma ve BLOAT için kullanılan PostgreSQL VACUUM, ANALYZE, REINDEX, CLUSTER ve pg_repack aracının kullanımı yer alıyor.
Veri tabanı tasarımı, normalizasyonu, index düzenlemesi, partition kullanımı ve dağıtık sunucu kullanımı ile veri tabanı yönetim sistemleri hızlandırılabilir.
Ancak veritabanı üzerinde yapılan ekleme, silme ve güncelleme işlemleri dosya sisteminden fiziksel olarak silinmediğinden dosya yapısı gereğinden fazla veri içerebilir.
Veritabanı dosyanın büyüyerek dosya yapısının bozulması sorguların yavaşlamasına neden olur.
Veri tabanındaki tabloların belirli aralıklarla bakımının yapılması sorguların önemli ölçüde iyileşmesini sağlar.
PostgreSQL bakımı
Veri tabanındaki tabloların bakımı öncesinde PostgreSQL Yedek Alma Ve Yükleme işleminin yapılması faydalı olacaktır.
VACUUM
Veritabanında silinmiş veya güncellenmiş kayıtların boş bıraktığı boş alanı (dead tuple) temizleyerek performans artışı sağlar.
Veritabanındaki tüm tablolara VACUUM işlemini yapmak için aşağıdaki komut kullanılır.
VACUUM;
Veritabanındaki tabloları kilitleyip, verileri başka dosyaya alıp işlem yapar.
VACUUM FULL;
NOT: İşlemin yapılabilmesi için diste yeterli alan olması gerekir.
Sadece belirli tabloya VACUUM işlemini yapmak için tablo adı belirtilebilir.
VACUUM tablo_adi;
Autovacuum
PostgreSQL VACUUM işlemini otomatik olarak yapmak için Autovacuum özelliğine sahiptir.
Autovacuum özelliği PostgreSQL ayarlarında aktif edilerek belirtilen ayarlara göre VACUUM işlemini yapılmasını sağlar.
Ayar dosyasını bulmak için psql komut yorumlayıcısına aşağıdaki komutun yazılması yeterli olacaktır.
SHOW config_file;
Detaylı bilgi almak için PostgreSQL psql Nedir? Kullanımı yazıma bakmalısın.
Aşağıdaki ayarlar isteğe göre düzenlenerek PostgreSQL ayar dosyasına göre eklenerek Autovacuum özelliğine aktif hale getirilir.
autovacuum = on # Autovacuum aktif
log_autovacuum_min_duration = -1 # loglama devredışı
autovacuum_max_workers = 3 # Autovacuum thread sayısı
autovacuum_naptime = 1min # bekleme süresi
autovacuum_vacuum_threshoold=50 # Autovacuum(VACUUM) çalışma şartı (50 değişiklik)
autovacuum_analyze_threshoold=50 # Autovacuum(ANALYZE) çalışma şartı (50 değişiklik)
autovacuum_vacuum_scale_factor=0.2 # Tablo boyutunda %20 değişiklik olduğunda çalıştır(VACUUM).
autovacuum_analyze_scale_factor=0.1 # Tablo boyutunda %10 değişiklik olduğunda çalıştır(ANALYZE).
autovacuum_freeze_max_age=2000000000 # Dondurulacak verilerin en fazla yaşı
autovacuum_multiexact_freeze_max_age=4000000000 # Çoklu dondurulacak verilerin en fazla yaşı
autovacuum_cost_delay=20ms # Autovacuum işlemleri arasında bekleme süresi
autovacuum_vacuum_cost_limit=-1 # Autovacuum işlem maliyet sınırı
Autovacuum ayarlarını görüntülemek için aşağıdaki komut kullanılır.
SHOW autovacuum;
NOT: Bakım sırasında işlemci, ram gibi kaynakların kullanımı arttığından dolayı autovacuum ayalarının iyi belirlenmesi faydalı olacaktır.
ANALYZE
Veritabanındaki tablo, index, veri dağılımı, veri sıklığı ve diğer bilgileri toplayıp, sorgu planlayıcısının en iyi sorguyu hazırlamasını sağlayarak performans artışı sağlar.
Veritabanındaki tüm tablolara ANALYZE işlemini yapmak için aşağıdaki komut kullanılır.
ANALYZE;
Sadece belirli tabloya ANALYZE işlemini yapmak için tablo adı belirtilebilir.
VACUUM tablo_adi;
Sadece belirli tablo sütununa ANALYZE işlemini yapmak için tablo adı ve sütun adı belirtilebilir.
VACUUM tablo_adi(sutun_adi);
VACUUM ve ANALYZE işlemleri tüm veritabanına aşağıdaki gibi yapılır.
VACUUM ANALYZE;
VACUUM ve ANALYZE işlemleri belirli tabloya aşağıdaki gibi yapılır.
VACUUM ANALYZE tablo_adi;
REINDEX
Veritabanına işlemleri sonrası bozulan index yapısını yeniden oluşturarak performans artışı sağlar.
Sadece belirli index yapısını yeniden oluşturur.
REINDEX INDEX index_adi;
Sadece belirli tabloya REINDEX işlemini yapmak için tablo adı belirtilebilir.
REINDEX TABLE tablo_adi;
Sadece belirli veritabanına DATABASE işlemini yapmak için veritabanı adı belirtilebilir.
REINDEX DATABASE vt_adi;
Sadece belirli şemaya SCHEMA işlemini yapmak için şema adı belirtilebilir.
REINDEX SCHEMA şema_adi;
CLUSTER
Veritabanındaki verileri index sırasına göre fiziksel olarak düzeneleyip aynı verilerin aynı fiziksel dosyada olmasını sağlayarak performans artışı sağlar
Tabloyu varsayılan (ilk index/birincil anahtar/primary key) index sırasına göre düzenler.
CLUSTER tablo_adi;
Tabloyu belirtilen index sırasına göre düzenler.
CLUSTER tablo_adi USING index_adi;
pg_repack
PostgreSQL sisteminin en önemli özelliği sağlamış olduğu çeşitli araçlarla genişletilebilir bir yapıya sahip olmasıdır.
PostgreSQL pg_repack aracı VACUUM, ANALYZE, REINDEX, CLUSTER komutlarına benzer olarak veritabanı, tablo ve index bakımının yanında daha az kilitleme yaparak performans artışıyla birlikte bakım sırasında verilere erişimi sağlar.
Aracın kurulumu kullanılan işletim sistemine göre değişiklik gösterir.
RedHat tabanlı işletim sistemlerine kurulum için aşağıdaki komut kullanılır.
yum install pg_repack12
Debian tabanlı işletim sistemlerine kurulum için aşağıdaki komut kullanılır.
sudo apt install pg-repack
Kurulum sonrası araç komut yorumlayıcısında kullanılır.
Aşağıdaki komut veritabani_adi ile belirtilen veritabanında bakım yapar.
pg_repack -d veritabani_adi;
Aşağıdaki komut veritabani_adi ve tablo_adi ile belirtilen tabloda bakım yapar.
pg_repack -d veritabani_adi tablo_adi;
Aşağıdaki komut veritabani_adi ile belirtilen veritabanında tam/detaylı bakım yapar.
pg_repack -d veritabani_adi --full;
PostgreSQL bakım komutları küçük boyutlu veri tabanlarında pek faydalı olmasa da büyük boyutlu veri tabanlarında oldukça faydalı olacaktır.
Hayırlı günler dilerim.