Π˜ΡΡ‚ΠΎΡ€ΠΈΡ˜Π° Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½Π° сСсија Π½Π° PostgreSQL - Π½ΠΎΠ²Π° Π΅ΠΊΡΡ‚Π΅Π½Π·ΠΈΡ˜Π° pgsentinel

ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ˜Π°Ρ‚Π° пгсСнтинСл ја објави наставката pgsentinel со истото ΠΈΠΌΠ΅ (ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Π·Π° github), кој Π³ΠΎ Π΄ΠΎΠ΄Π°Π²Π° ΠΏΠΎΠ³Π»Π΅Π΄ΠΎΡ‚ pg_active_session_history Π½Π° PostgreSQL - ΠΈΡΡ‚ΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ сСсии (слично Π½Π° v$active_session_history Π½Π° Oracle).

Π’ΠΎ ΡΡƒΡˆΡ‚ΠΈΠ½Π°, ΠΎΠ²Π° сС Сдноставно снимки ΠΎΠ΄ сСкунда Π²ΠΎ сСкунда ΠΎΠ΄ pg_stat_activity, Π½ΠΎ ΠΈΠΌΠ° Π²Π°ΠΆΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ:

  1. Π‘ΠΈΡ‚Π΅ Π°ΠΊΡƒΠΌΡƒΠ»ΠΈΡ€Π°Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ сС складираат само Π²ΠΎ RAM ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°, Π° ΠΏΠΎΡ‚Ρ€ΠΎΡˆΠ΅Π½Π°Ρ‚Π° ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π° Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π° сС Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π° со Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° послСднитС Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈ записи.
  2. ΠŸΠΎΠ»Π΅Ρ‚ΠΎ queryid Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΎ - истиот ΠΏΡ€Π°ΡˆΠ°Π»Π½ΠΈΠΊ ΠΎΠ΄ наставката pg_stat_statements (ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π΅ ΠΏΡ€Π΅Ρ‚ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°).
  3. Π‘Π΅ Π΄ΠΎΠ΄Π°Π²Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ 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-ΠŸΡ€Π΅Π³Π»Π΅Π΄ΡƒΠ²Π°Ρ‡ (собранитС Π±ΠΈΠ½Π°Ρ€Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Изданија).

ΠŸΡ€ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅, PASH-Viewer (ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΎΠ΄ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° 0.4.0) ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π΄Π°Π»ΠΈ ΠΈΠΌΠ° ΠΏΡ€ΠΈΠΊΠ°Π· Π½Π° pg_active_session_history ΠΈ Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ постои, ја Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π° Ρ†Π΅Π»Π°Ρ‚Π° Π°ΠΊΡƒΠΌΡƒΠ»ΠΈΡ€Π°Π½Π° ΠΈΡΡ‚ΠΎΡ€ΠΈΡ˜Π° ΠΎΠ΄ Π½Π΅Π³ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒΠ²Π° Π΄Π° Ρ‡ΠΈΡ‚Π° Π½ΠΎΠ²ΠΈ дојдовни ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π°ΠΆΡƒΡ€ΠΈΡ€Π°Ρ˜ΡœΠΈ Π³ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΡ‚ Π½Π° сСкои 15 сСкунди.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ˜Π° Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½Π° сСсија Π½Π° PostgreSQL - Π½ΠΎΠ²Π° Π΅ΠΊΡΡ‚Π΅Π½Π·ΠΈΡ˜Π° pgsentinel

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€