เบ›เบฐเบซเบงเบฑเบ”เบ‚เบญเบ‡เป€เบŠเบ”เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบงเบฝเบ PostgreSQL - new pgsentinel extension

เบšเปโ€‹เบฅเบดโ€‹เบชเบฑเบ” pgsentinel เบ›เปˆเบญเบเบ•เบปเบงเบ‚เบฐเบซเบเบฒเบ pgsentinel เบ‚เบญเบ‡เบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™ (github repository), เป€เบŠเบดเปˆเบ‡เป€เบžเบตเปˆเบกเบกเบธเบกเป€เบšเบดเปˆเบ‡ pg_active_session_history เบเบฑเบš PostgreSQL โ€” เบ›เบฐเบซเบงเบฑเบ”เบ‚เบญเบ‡เป€เบŠเบ”เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบงเบฝเบ (เบ„เป‰เบฒเบเบเบฑเบš Oracle's v$active_session_history).

เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบง, เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบžเบฒเบšเบ–เปˆเบฒเบเบ—เบตเบชเบญเบ‡เป‚เบ”เบเบงเบดเบ™เบฒเบ—เบตเบˆเบฒเบ pg_stat_activity, เปเบ•เปˆเบกเบตเบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™:

  1. เบ‚เปเป‰เบกเบนเบ™เบชเบฐเบชเบปเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ RAM เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบˆเปเบฒเบ™เบงเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบšเปเบฅเบดเป‚เบžเบเบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเบˆเปเบฒเบ™เบงเบ™เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เบชเบธเบ”เบ—เป‰เบฒเบ.
  2. เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ queryid เบ–เบทเบเป€เบžเบตเปˆเบก - queryid เบ”เบฝเบงเบเบฑเบ™เบˆเบฒเบเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ pg_stat_statements (เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเปˆเบญเบ™).
  3. เบŠเปˆเบญเบ‡ top_level_query เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก - เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™ (เบ–เป‰เบฒเปƒเบŠเป‰ pl/pgsql)


เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบกเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ pg_active_session_history:

      เบ–เบฑเบ™ | เบžเบดเบก ------------------+-------------------------- ash_time | timetamp เบเบฑเบšเป€เบ‚เบ”เป€เบงเบฅเบฒ datid | เบŠเบทเปˆเบงเบฑเบ™เบ—เบต | pid เบ‚เปเป‰เบ„เบงเบฒเบก | เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก เปƒเบŠเป‰ysid | เบŠเบทเปˆเบเบฒเบ™เปƒเบŠเป‰ oid | เบ‚เปเป‰เบ„เบงเบฒเบก application_name | เบ‚เปเป‰เบ„เบงเบฒเบก client_addr | text client_hostname | text client_port | integer backend_start | timestamp เบเบฑเบšเป€เบ‚เบ”เป€เบงเบฅเบฒ xact_start | timetamp เบเบฑเบšเป€เบ‚เบ”เป€เบงเบฅเบฒ query_start | timestamp with time zone state_change | timestamp with time zone wait_event_type | เบ‚เปเป‰เบ„เบงเบฒเบก wait_event | เบชเบฐเบ–เบฒเบ™เบฐเบ‚เปเป‰เบ„เบงเบฒเบก | เบ‚เปเป‰เบ„เบงเบฒเบก backend_xid | xid backend_xmin | xid top_level_query | เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบญเบšเบ–เบฒเบก | เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบญเบšเบ–เบฒเบก | 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

Restart PostgreSQL เปเบฅเบฐเบชเป‰เบฒเบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ:

เบชเป‰เบฒเบ‡ pgsentinel เบ‚เบฐเบซเบเบฒเบ;

เบ‚เปเป‰เบกเบนเบ™เบชเบฐเบชเบปเบกเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เบญเบšเบ„เปเบฒเบ–เบฒเบกเป€เบŠเบฑเปˆเบ™:

  • เบŠเปˆเบงเบ‡เบฅเปเบ–เป‰เบฒเบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”?
  • เป€เบŠเบ”เบŠเบฑเบ™เปƒเบ”เบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”?
  • เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบ”เบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”?

เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเบ•เบญเบšเบ•เปเปˆเบ„เปเบฒเบ–เบฒเบกเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบ–เบฒเบก SQL, เปเบ•เปˆเบกเบฑเบ™เบชเบฐเบ”เบงเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบซเบฑเบ™เบ™เบตเป‰เบ”เป‰เบงเบเบชเบฒเบเบ•เบฒเปƒเบ™เบเบฒเบŸเป‚เบ”เบเบเบฒเบ™เป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบŠเปˆเบงเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบเบฑเบšเบซเบ™เบน. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เป‰เบงเบเป‚เบ„เบ‡เบเบฒเบ™เบŸเบฃเบต PASH-Viewer (เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ”เบฒเบงโ€‹เบ™โ€‹เปŒโ€‹เป‚เบซเบฅเบ” binary เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เปƒเบ™โ€‹เบžเบฒเบโ€‹เบชเปˆเบงเบ™โ€‹ เบเบฒเบ™เบ›เปˆเบญเบ).

เป€เบกเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, PASH-Viewer (เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบฎเบธเปˆเบ™ 0.4.0) เบเบงเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เบกเบธเบกเบกเบญเบ‡ pg_active_session_history เปเบฅเบฐเบ–เป‰เบฒเบกเบฑเบ™เบกเบตเบขเบนเปˆ, เบกเบฑเบ™เบˆเบฐเป‚เบซเบฅเบ”เบ›เบฐเบซเบงเบฑเบ”เบเบฒเบ™เบชเบฐเบชเบปเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเบกเบฑเบ™เปเบฅเบฐเบชเบทเบšเบ•เปเปˆเบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ, เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบŸเบ—เบธเบเป† 15 เบงเบดเบ™เบฒเบ—เบต.

เบ›เบฐเบซเบงเบฑเบ”เบ‚เบญเบ‡เป€เบŠเบ”เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบงเบฝเบ PostgreSQL - new pgsentinel extension

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™