ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ
ΠΡΡΡΠ½ΠΎΡΡ ΡΠΎΠ²Π° ΡΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠ½ΠΈ ΡΠ½ΠΈΠΌΠΊΠΈ Π½Π° Π²ΡΡΠΊΠ° ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΎΡ pg_stat_activity, Π½ΠΎ ΠΈΠΌΠ° Π²Π°ΠΆΠ½ΠΈ ΡΠΎΡΠΊΠΈ:
- Π¦ΡΠ»Π°ΡΠ° Π½Π°ΡΡΡΠΏΠ°Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΡΠ°ΠΌΠΎ Π² RAM, Π° ΠΎΠ±Π΅ΠΌΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΡΠ΅ ΡΠ΅Π³ΡΠ»ΠΈΡΠ° ΠΎΡ Π±ΡΠΎΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈ Π·Π°ΠΏΠΈΡΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΎ Π΅ ΠΏΠΎΠ»Π΅ΡΠΎ queryid - ΡΡΡΠΎΡΠΎ queryid ΠΎΡ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ pg_stat_statements (ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ).
- ΠΠΎΠ±Π°Π²Ρ ΡΠ΅ ΠΏΠΎΠ»Π΅ΡΠΎ top_level_query - ΡΠ΅ΠΊΡΡΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΎΡ ΠΊΠΎΡΡΠΎ Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° (Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° pl/pgsql)
ΠΡΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ Ρ ΠΏΠΎΠ»Π΅ΡΠ° pg_active_session_history:
ΠΊΠΎΠ»ΠΎΠ½Π° | Π’ΠΈΠΏ ------------------+-------------------- ash_time | ΠΊΠ»Π΅ΠΉΠΌΠΎ Ρ ΡΠ°ΡΠΎΠ²Π° Π·ΠΎΠ½Π° Ρ Π΄Π°ΡΠ° | oid ΠΈΠΌΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ | ΡΠ΅ΠΊΡΡ pid | ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ usesid | oid ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ ΠΈΠΌΠ΅ | ΡΠ΅ΠΊΡΡ ΠΈΠΌΠ΅_Π½Π°_ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ | ΡΠ΅ΠΊΡΡ client_addr | ΡΠ΅ΠΊΡΡ client_hostname | ΡΠ΅ΠΊΡΡ client_port | ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ backend_start | ΠΊΠ»Π΅ΠΉΠΌΠΎ Ρ ΡΠ°ΡΠΎΠ²Π° Π·ΠΎΠ½Π° xact_start | ΠΊΠ»Π΅ΠΉΠΌΠΎ Ρ ΡΠ°ΡΠΎΠ²Π° Π·ΠΎΠ½Π° query_start | ΠΊΠ»Π΅ΠΉΠΌΠΎ Ρ ΡΠ°ΡΠΎΠ²Π° Π·ΠΎΠ½Π° state_change | ΠΊΠ»Π΅ΠΉΠΌΠΎ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Ρ ΡΠ°ΡΠΎΠ²Π° Π·ΠΎΠ½Π° wait_event_type | ΡΠ΅ΠΊΡΡ wait_event | ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΊΡΡΠ° | ΡΠ΅ΠΊΡΡ backend_xid | xid backend_xmin | xid Π·Π°ΡΠ²ΠΊΠ° ΠΎΡ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΎ_Π½ΠΈΠ²ΠΎ | ΡΠ΅ΠΊΡΡΠΎΠ²Π° Π·Π°ΡΠ²ΠΊΠ° | ΡΠ΅ΠΊΡΡΠΎΠ²Π° Π·Π°ΡΠ²ΠΊΠ° | bigint backend_type | ΡΠ΅ΠΊΡΡ
ΠΡΠ΅ ΠΎΡΠ΅ Π½ΡΠΌΠ° Π³ΠΎΡΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ. ΠΡΠ΅Π΄Π»Π°Π³Π° ΡΠ΅ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΈ ΡΠ°ΠΌΠΈ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°. ΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° βdevelβ Π·Π° Π²Π°ΡΠΈΡ ΡΡΡΠ²ΡΡ ΠΈ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΡΡ ΠΊΡΠΌ pg_config Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° PATH. ΠΠΈΠ΅ ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅:
cd pgsentinel/src
ΠΏΡΠ°Π²Ρ
Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅
ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΊΡΠΌ postgres.conf:
shared_preload_libraries = 'pg_stat_statements,pgsentinel'
track_activity_query_size = 2048
pg_stat_statements.track = Π²ΡΠΈΡΠΊΠΈ# Π±ΡΠΎΠΉ ΡΠΊΠΎΡΠΎΡΠ½ΠΈ Π·Π°ΠΏΠΈΡΠΈ, ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½ΠΈ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°
pgsentinel_ash.max_entries = 10000
ΠΡΠ΅Π·Π°ΡΠ΅Π΄Π΅ΡΠ΅ PostgreSQL ΠΈ ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅:
ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ pgsentinel;
ΠΠ°ΡΡΡΠΏΠ°Π½Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π° Π²ΡΠΏΡΠΎΡΠΈ ΠΊΠ°ΡΠΎ:
- ΠΠ° ΠΊΠ°ΠΊΠ²ΠΈ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡ ΡΠ° ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ΡΠΈΠΈΡΠ΅?
- ΠΠΎΠΈ ΡΠ΅ΡΠΈΠΈ Π±ΡΡ Π° Π½Π°ΠΉ-Π°ΠΊΡΠΈΠ²Π½ΠΈ?
- ΠΠΎΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π±ΡΡ Π° Π½Π°ΠΉ-Π°ΠΊΡΠΈΠ²Π½ΠΈ?
ΠΠΎΠΆΠ΅ΡΠ΅, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° ΡΠ΅Π·ΠΈ Π²ΡΠΏΡΠΎΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° SQL Π·Π°ΡΠ²ΠΊΠΈ, Π½ΠΎ Π΅ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠ²Π° ΡΡΠ½ΠΎ Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠ°ΡΠΎ ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π²Π°ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠΈΡΠ΅ Π²ΠΈ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ Ρ ΠΌΠΈΡΠΊΠ°ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Ρ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°
ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ PASH-Viewer (Π·Π°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ Π²Π΅ΡΡΠΈΡ 0.4.0) ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ·Π³Π»Π΅Π΄ pg_active_session_history ΠΈ Π°ΠΊΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°, Π·Π°ΡΠ΅ΠΆΠ΄Π° ΡΡΠ»Π°ΡΠ° Π½Π°ΡΡΡΠΏΠ°Π½Π° ΠΈΡΡΠΎΡΠΈΡ ΠΎΡ Π½Π΅Π³ΠΎ ΠΈ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΡΠ΅ΡΠ΅ Π½ΠΎΠ²ΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈ Π΄Π°Π½Π½ΠΈ, Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΠΊΠΈ Π³ΡΠ°ΡΠΈΠΊΠ°ΡΠ° Π½Π° Π²ΡΠ΅ΠΊΠΈ 15 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com