ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ
ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ-Π½Π°ΠΏΡΠΎΡΡΠΎ Π΅ΠΆΠ΅ΡΠ΅ΠΊΡΠ½Π΄Π½ΡΠ΅ ΡΠ½ΠΈΠΌΠΊΠΈ ΠΈΠ· pg_stat_activity, Π½ΠΎ Π΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ:
- ΠΡΡ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, Π° ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΡΠΌ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ΅Π³ΡΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Ρ ΡΠ°Π½ΠΈΠΌΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ.
- ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅ queryid β ΡΠΎΡ ΡΠ°ΠΌΡΠΉ queryid ΠΈΠ· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ pg_stat_statements (ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°).
- ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅ top_level_query β ΡΠ΅ΠΊΡΡ Π·Π°ΠΏΡΠΎΡΠ°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ ΡΠ΅ΠΊΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ (Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ pl/pgsql)
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ pg_active_session_history:
Column | Type ------------------+-------------------------- ash_time | timestamp with time zone datid | oid datname | text pid | integer usesysid | oid usename | text application_name | text client_addr | text client_hostname | text client_port | integer backend_start | timestamp with time zone xact_start | timestamp with time zone query_start | timestamp with time zone state_change | timestamp with time zone wait_event_type | text wait_event | text state | text backend_xid | xid backend_xmin | xid top_level_query | text query | text queryid | bigint backend_type | text
ΠΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠΊΠ° Π½Π΅Ρ. ΠΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΡΠΊΠ°ΡΠ°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Β«develΒ»-ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ PATH ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΏΡΡΡ Π΄ΠΎ pg_config. Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ:
cd pgsentinel/src
make
make install
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² postgres.conf:
shared_preload_libraries = ‘pg_stat_statements,pgsentinel’
track_activity_query_size = 2048
pg_stat_statements.track = all# ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ
pgsentinel_ash.max_entries = 10000
ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ PostgreSQL ΠΈ ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅:
create extension pgsentinel;
ΠΠ°ΠΊΠΎΠΏΠ»Π΅Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΠ°ΠΊΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, ΠΊΠ°ΠΊ:
- ΠΠ° ΠΊΠ°ΠΊΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΡ ΡΠ΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ²Π΅Π»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ?
- ΠΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ Π±ΡΠ»ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡΠΈΠ²Π½Ρ?
- ΠΠ°ΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π±ΡΠ»ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡΠΈΠ²Π½Ρ?
ΠΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅ΡΡ Π½Π° ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, SQL-Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ, Π½ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ΅, Π²ΡΠ΄Π΅Π»ΡΡ ΠΌΡΡΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅ΠΌΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ PASH-Viewer (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 0.4.0) ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ pg_active_session_history ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π΅ΡΡΡ, ΡΠΎ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈΠ· Π½Π΅Π³ΠΎ Π²ΡΡ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ Π³ΡΠ°ΡΠΈΠΊ ΡΠ°Π· Π² 15 ΡΠ΅ΠΊΡΠ½Π΄.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com