Część programistów czy administratorów boryka się z problemem analizy dużej ilości logów bazy Postgresql . Często potrzebujemy znaleźć zapytania SQL, które powodują największe obciążenie naszej bazy danych. Z pomocą przychodzi nam narzędzie o nazwie pgFouine.

Na początku instalujemy pakiet pgFouine, np. na Ubuntu:

sudo apt-get install pgfouine

Następnie w pliku konfiguracyjnym postgres-a definiujemy (w zależności od wersji mogą się trochę różnić ustawienia):

log_destination = 'stderr’
redirect_stderr = on
log_line_prefix = '%t [%p]: [%l-1] ’

log_min_duration_statement = 1000

gdzie 1000 określa czas (w ms) wykonania zapytania – tylko takie zapytania sql znajdą się w raporcie.

Następnie ładujemy do postgresa nową konfigurację, np.

/etc/init.d/postgresql-8.4 reload

i zaczyna się zbieranie logów do naszej analizy.

Teraz nadszedł czas na zaprzęgnięcie do pracy pgFouine. Aby uzyskać raport na temat czasów wykonania sql wykonujemy polecenie (przy założeniu, że analiza będzie dotyczyć tylko dwóch ostatnich plików z logami postgres-a):

cat $(find /var/lib/postgresql/8.4/main/pg_log/ -type f | sort | tail -n 2) | /usr/bin/pgfouine -logtype stderr – >/var/lib/postgresql/pgfouine/report.html 2>/dev/null

Dzięki tej operacji uzyskujemy raport html (report.html) w bardzo czytelnej postaci.

Czasami zdarza się, że dostaniemy błąd o przekroczonej pamięci typu:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted

Dzieje się tak dlatego, że pgFouine posiada wewnętrzne ograniczenie na ilość pamięci, którą może przeznaczyć na generowanie raportu. Aby temu zaradzić możemy użyć opcji pgFouine -memorylimit , czyli np. dodajemy -memorylimit 1024 .

 

 

 

Leave A Reply

Exit mobile version