ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ°ΡΠ°
ΠΠΎ ΡΡΡΡΠΈΠ½Π°, ΠΎΠ²Π° ΡΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ½ΠΈΠΌΠΊΠΈ ΠΎΠ΄ ΡΠ΅ΠΊΡΠ½Π΄Π° Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΎΠ΄ pg_stat_activity, Π½ΠΎ ΠΈΠΌΠ° Π²Π°ΠΆΠ½ΠΈ ΡΠΎΡΠΊΠΈ:
- Π‘ΠΈΡΠ΅ Π°ΠΊΡΠΌΡΠ»ΠΈΡΠ°Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°Π°Ρ ΡΠ°ΠΌΠΎ Π²ΠΎ RAM ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°, Π° ΠΏΠΎΡΡΠΎΡΠ΅Π½Π°ΡΠ° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΡΠ΅ ΡΠ΅Π³ΡΠ»ΠΈΡΠ° ΡΠΎ Π±ΡΠΎΡΠΎΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°ΡΡΠ²Π°Π½ΠΈ Π·Π°ΠΏΠΈΡΠΈ.
- ΠΠΎΠ»Π΅ΡΠΎ queryid Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΎ - ΠΈΡΡΠΈΠΎΡ ΠΏΡΠ°ΡΠ°Π»Π½ΠΈΠΊ ΠΎΠ΄ Π½Π°ΡΡΠ°Π²ΠΊΠ°ΡΠ° pg_stat_statements (ΠΏΠΎΡΡΠ΅Π±Π½Π° Π΅ ΠΏΡΠ΅ΡΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°).
- Π‘Π΅ Π΄ΠΎΠ΄Π°Π²Π° ΠΏΠΎΠ»Π΅ΡΠΎ top_level_query - ΡΠ΅ΠΊΡΡΠΎΡ Π½Π° Π±Π°ΡΠ°ΡΠ΅ΡΠΎ ΠΎΠ΄ ΠΊΠΎΠ΅ Π΅ ΠΏΠΎΠ²ΠΈΠΊΠ°Π½ΠΎ ΡΠ΅ΠΊΠΎΠ²Π½ΠΎΡΠΎ Π±Π°ΡΠ°ΡΠ΅ (Π°ΠΊΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ pl/pgsql)
Π¦Π΅Π»ΠΎΡΠ½Π° Π»ΠΈΡΡΠ° Π½Π° ΠΏΠΎΠ»ΠΈΡΠ° pg_active_session_history:
ΠΠΎΠ»ΠΎΠ½Π° | Π’ΠΈΠΏ ------------------+--------------------------Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΏΠ΅ΠΏΠ΅Π» | Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΠ΅ΡΠ°Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ° Π·ΠΎΠ½Π° datid | oid Π΄Π°ΡΡΠΌ ΠΈΠΌΠ΅ | ΡΠ΅ΠΊΡΡ pid | ΡΠ΅Π» Π±ΡΠΎΡ useysid | oid ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎ ΠΈΠΌΠ΅ | ΡΠ΅ΠΊΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°_ΠΈΠΌΠ΅ | ΡΠ΅ΠΊΡΡ client_addr | ΡΠ΅ΠΊΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ_Π΄ΠΎΠΌΠ°ΡΠΈΠ½ | ΡΠ΅ΠΊΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ_ΠΏΠΎΡΡΠ° | ΡΠ΅Π» Π±ΡΠΎΡ backend_start | Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΠ΅ΡΠ°Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ° Π·ΠΎΠ½Π° xact_start | Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΠ΅ΡΠ°Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ° Π·ΠΎΠ½Π° query_start | Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΠ΅ΡΠ°Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ° Π·ΠΎΠ½Π° state_change | Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΠ΅ΡΠ°Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ° Π·ΠΎΠ½Π° ΡΠ΅ΠΊΠ°ΡΠ΅_ΡΠΈΠΏ_Π½Π°ΡΡΠ°Π½ | ΡΠ΅ΠΊΡΡ ΡΠ΅ΠΊΠ°_Π½Π°ΡΡΠ°Π½ | ΡΠΎΡΡΠΎΡΠ±Π° Π½Π° ΡΠ΅ΠΊΡΡ | ΡΠ΅ΠΊΡΡ backend_xid | xid backend_xmin | xid Π½Π°ΡΠ²ΠΈΡΠΎΠΊΠΎ_Π½ΠΈΠ²ΠΎ_ΠΏΡΠ°ΡΠ°ΡΠ΅ | ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΎ Π±Π°ΡΠ°ΡΠ΅ | ΠΏΡΠ°ΡΠ°Π»Π½ΠΈΠΊ Π·Π° ΡΠ΅ΠΊΡΡ | bigint backend_type | ΡΠ΅ΠΊΡΡ
Π‘Γ¨ ΡΡΡΠ΅ Π½Π΅ΠΌΠ° Π³ΠΎΡΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°. Π‘Π΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠ°ΠΌΠΈΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΈΠ·Π²ΠΎΡΠΈΡΠ΅ ΠΈ Π΄Π° ΡΠ° ΡΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°. ΠΡΠ²ΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ βdevelβ Π·Π° Π²Π°ΡΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ Π΄Π° ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎ pg_config Π²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° PATH. ΠΠΈΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅:
cd pgsentinel/src
Π½Π°ΠΏΡΠ°Π²ΠΈ
make install
ΠΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° 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