PostgreSQL AWR

PostgreSQL de yoğunluk, dar boğaz yada daha farklı olaylarda  cluster ve veritabanı bazlı inceleme yapmanız için birden fazla şeyleri incelemeniz gerekebilir. Performans sorunu yaşandığını düşünürsek  bu sorunun tespiti için indexlerin kullanılıp kullanılmadığını  ,I/O ,cpu gibi şeyleri inceleriz .Bunlar için tek tek sorgu yazmamız ve tek tek incelememiz gerekir .Bu işlemleri yapmaktansa hepsini bir arada toplayıp html formatında çıktısını veren pg_profile extensionını kullanabiliriz.

Pg_profile extension’ı PostgreSQL ‘in standart istatistik görünümlerine dayanmaktadır. Pl/pgsql ile yazılmıştır .Çalışma mantığı olarak Oracle AWR mimarisine benzemektedir. Oracle da ki gibi belirlenen zamanlarda snapshot alır ve bu snapshotlar arasında ki istatistiksel verileri yorumlamak için size html formatında verir.

Kısa bilgiden sonra  nasıl kurabiliriz ve bunu nasıl sistemimize uyarlayabiliriz onu anlatalım.

Kuruluma geçmeden önce postgresql.conf da bazı konfigurasyonları yapmamız gerekiyor .Bunları aşağıdaki gibi ayarlayabiliriz.

İstatistikleri toplamak için postgresql.conf üzerinden değiştirmemiz gerekir.

track_activities = on

track_counts = on

track_io_timing = on

track_functions = on

Yukarıdaki adımlar yapıldıktan sonra pg_stat_statements parametrelerini değiştiriyoruz.

shared_preload_libraries = 'pg_stat_statements'

pg_stat_statements.max = 1000

pg_stat_statements.track = 'top'

pg_stat_statements.save = off

İlk olarak github da belirtilen pg_profile extensionını aşağıdaki linkten indirmemiz gerekiyor.

https://github.com/zubkov-andrei/pg_profile

Sunucuya ilgili dosyayı indirdikten sonra klasorün içine girerek aşağıdaki adımları izliyoruz.

Make komutunu çalıştırıyoruz.

make install

Bu işlemi yaparken aşağıdaki gibi hata alıyorsanız aşağıdaki gibi path parametresinin sonunda make install yazarak yapabilirsiniz.

PATH=/usr/pgsql-10/bin:$PATH  make install

Make install komutunu çalıştırdık ve gerekli konfigurasyonları yaptıysak psql client’ı ile PostgreSQL e bağlanarak extensionları aşağıdaki gibi oluşturabiliriz.

CREATE EXTENSION dblink;

CREATE EXTENSION pg_stat_statements;

CREATE SCHEMA profile;

Pg_profile sekmesinde oluşturulacak bütün nesnelerin profile şemasında oluşturulması için aşağıdaki komutu çalıştırabiliriz.

CREATE EXTENSION pg_profile SCHEMA profile;

Extension’ı güncellemek içinde aşağıdaki komuttan yararlanabilirsiniz.

alter extension pg_profile update;

Yukarıda bahsettiğim gibi pg_profile’ın çalışma mantığı  belirlenen zamanlarda snapshot alır ve bu snapshotlar arasında ki istatistiksel verileri yorumlamak için size html formatında verir. Bundan dolayı crontab a snapshot functionlarını aşağıdaki gibi eklememiz gerekiyor. Ben yarım saatte bir alacak şekilde ayarladım fakat siz daha kısa süreli yapabilirsiniz.

Crontab -e ile crontabı açıyoruz ve aşağıdaki komutları ekliyoruz.

*/30 * * * *   psql -c 'SELECT profile.snapshot()' > /var/log  2>&1

*/30 * * * *   psql -c 'SELECT snapshot()' > /var/log  2>&1

Yukarıdaki komutta logları var/log dizinin altına yazmasını istedim isterseniz siz değiştirebilirsiniz.Aşağıdaki komut yardımı ile belirtilen saatten önce snapshot alabilirsiniz.

psql -c 'SELECT profile.snapshot()'

Aşağıdaki komut yardımı ile aldığınız snapshotları görüntüleyebilirsiniz.

select*from snapshot_show();

Snapshotları aldıktan sonra aşağıdaki komut yardımı ile alınan snapshotları listeleyebiliriz.

AWR raporu şeklinde listelemek içinde aşağıdaki komutu kullanabiliriz.outputtan sonra path belirtip oraya yazdırabilirsiniz hiç bir şey verilmezse bulunduğunuz dizine oluşturur.

 psql -qtc "SELECT profile.report(1,8)" --output awr_report_postgres_1_8.html

Yukarıdaki scriptin çıktısı aşağıdaki gibi olacaktır.

 

Loading