Odpowiedzi:
Można dopasować określony identyfikator zaplecza Postgres do identyfikatora procesu systemowego za pomocą pg_stat_activity
tabeli systemowej.
SELECT pid, datname, usename, query FROM pg_stat_activity;
może być dobrym punktem wyjścia.
Gdy wiesz, jakie zapytania są uruchomione, możesz dalej badać ( EXPLAIN
/ EXPLAIN ANALYZE
; sprawdź blokady itp.)
WHERE
klauzuli, ale jeśli nie masz ogromnej liczby PID, to tak samo łatwe do przeszukania pełnego wyniku. Podręcznik Postgres zawiera dodatkowe informacje na temat tego, z czego możesz się wydostaćpg_stat_activity
, a także inne tabele gromadzące statystyki (które mogą ci pomóc, jeśli twoim problemem nie jest zapytanie użytkownika).
Miałem ten sam problem. Postgresql jest ustawiony na AWS RDS i miał 100% wykorzystania procesora nawet po zwiększeniu instancji. Debugowałem za pomocą metody pokazanej tutaj i jedna z tych metod działała dla mnie.
Najdłużej sprawdzałem, czy zapytanie jest uruchomione i dowiedziałem się, że niektóre zapytania utknęły i działały od ponad 3-4 godzin. Aby sprawdzić, od jakiego czasu zapytanie jest uruchomione, uruchom następującą komendę:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
Jeśli jest to więcej niż godzina, to jest to problem. Zabij połączenie długo działające i ogranicz maksymalny wiek połączenia od strony aplikacji.
Jeśli tak naprawdę postmaster używa całego tego procesora, prawdopodobnie masz problemy z blokadą, prawdopodobnie z powodu bardzo wysokiego poziomu max_connections
. W takim przypadku rozważ obniżenie max_connections
i użycie puli połączeń.
W przeciwnym razie: Szczegóły proszę. Pełna wydajność top -b -n 1
na początek.
postgress
ISpostgres
i po prostu skopiowane go ręcznie.