PostgreSQL – podglądanie uruchomionych zapytań (long query)
Jak wyżej, coś w bazie mieli a my nie chcemy czekać aż się skończy i pojawi w logu wtylko chcemy podejrzeć teraz. To tak:
- W postgresql.conf ustawiamy
stats_command_string = true
- Restart bazy (pg_ctl reload mi nie pomógł, ale akurat testowałem na starej wersji 7.4)
- I tyle ;]. Teraz pare SQLi żeby wyciągnąć interesujące nas dane:
Podstawowa:
select * from pg_stat_activity;
Pokazuje wszystko co się aktualnie dzieje w bazie. Ale jeżeli chcemy wyciągnąć tylko długo działające to np.
select *, (now() - query_start) as time from pg_stat_activity where now()-query_start > time '00:00:10'
pokaże te działające dłużej niż 10 sekund. można nawet się pokusić o jakiś prosty skrypt logujący co się dzieje.
PGPASSWORD=some_pass /usr/bin/psql -h 1.2.3.4 -p5404 -U backup postgres -c "select now(), *, (now() - query_start) as time from pg_stat_activity where now()-query_start > time '00:00:10';" -A -t
a potem to wysłać albo do pliku albo przez mail do admina