แž”แŸ’แžšแžœแžแŸ’แžแžทแžŸแž˜แŸแž™แžŸแž€แž˜แŸ’แž˜ PostgreSQL - แž•แŸ’แž“แŸ‚แž€แž”แž“แŸ’แžแŸ‚แž˜ pgsentinel แžแŸ’แž˜แžธแŸ”

แž€แŸ’แžšแžปแž˜แž แŸŠแžปแž“แž“แŸแŸ‡ pgsentinel แž”แžถแž“แž…แŸแž‰แž•แŸ’แžŸแžถแž™แž•แŸ’แž“แŸ‚แž€แž”แž“แŸ’แžแŸ‚แž˜ pgsentinel แž“แŸƒแžˆแŸ’แž˜แŸ„แŸ‡แžŠแžผแž…แž‚แŸ’แž“แžถ (แžƒแŸ’แž›แžถแŸ†แž„ github) แžŠแŸ‚แž›แž”แž“แŸ’แžแŸ‚แž˜แž‘แžทแžŠแŸ’แž‹แž—แžถแž– pg_active_session_history แž‘แŸ… PostgreSQL โ€” แž”แŸ’แžšแžœแžแŸ’แžแžทแž“แŸƒแžœแž‚แŸ’แž‚แžŸแž€แž˜แŸ’แž˜ (แžŸแŸ’แžšแžŠแŸ€แž„แž‘แŸ…แž“แžนแž„ v$active_session_history แžšแž”แžŸแŸ‹ Oracle)แŸ”

แž‡แžถแžŸแŸ†แžแžถแž“แŸ‹ แž‘แžถแŸ†แž„แž“แŸแŸ‡แž‚แŸ’แžšแžถแž“แŸ‹แžแŸ‚แž‡แžถแžšแžผแž”แžแžแž–แžธแž˜แžฝแž™แž‘แŸ…แž˜แžฝแž™แžœแžทแž“แžถแž‘แžธแž–แžธ pg_stat_activity แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž˜แžถแž“แž…แŸ†แžŽแžปแž…แžŸแŸ†แžแžถแž“แŸ‹แŸ—แŸ–

  1. แž–แŸแžแŸŒแž˜แžถแž“แžŠแŸ‚แž›แž”แŸ’แžšแž˜แžผแž›แž”แžถแž“แž‘แžถแŸ†แž„แžขแžŸแŸ‹แžแŸ’แžšแžผแžœแž”แžถแž“แžšแž€แŸ’แžŸแžถแž‘แžปแž€แžแŸ‚แž“แŸ…แž€แŸ’แž“แžปแž„ RAM แž แžพแž™แž”แžšแžทแž˜แžถแžŽแž“แŸƒแžขแž„แŸ’แž‚แž…แž„แž…แžถแŸ†แžŠแŸ‚แž›แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แžแŸ’แžšแžผแžœแž”แžถแž“แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แžŠแŸ„แž™แž…แŸ†แž“แžฝแž“แž€แŸ†แžŽแžแŸ‹แžแŸ’แžšแžถแžŠแŸ‚แž›แž”แžถแž“แžšแž€แŸ’แžŸแžถแž‘แžปแž€แž…แžปแž„แž€แŸ’แžšแŸ„แž™แŸ”
  2. แžœแžถแž›แžŸแŸ†แžŽแžฝแžšแžแŸ’แžšแžผแžœแž”แžถแž“แž”แž“แŸ’แžแŸ‚แž˜ - แžŸแŸ†แžŽแžฝแžšแžŠแžผแž…แž‚แŸ’แž“แžถแž–แžธแž•แŸ’แž“แŸ‚แž€แž”แž“แŸ’แžแŸ‚แž˜ pg_stat_statements (แžแž˜แŸ’แžšแžผแžœแžฑแŸ’แž™แžŠแŸ†แžกแžพแž„แž‡แžถแž˜แžปแž“)แŸ”
  3. แžœแžถแž› top_level_query แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž“แŸ’แžแŸ‚แž˜ - แžขแžแŸ’แžแž”แž‘แž“แŸƒแžŸแŸ†แžŽแžฝแžšแžŠแŸ‚แž›แžŸแŸ†แžŽแžฝแžšแž”แž…แŸ’แž…แžปแž”แŸ’แž”แž“แŸ’แž“แžแŸ’แžšแžผแžœแž”แžถแž“แž แŸ… (แž”แŸ’แžšแžŸแžทแž“แž”แžพแž”แŸ’แžšแžพ pl/pgsql)


แž”แž‰แŸ’แž‡แžธแž–แŸแž‰แž›แŸแž‰แž“แŸƒแžœแžถแž› pg_active_session_historyแŸ–

      แž‡แžฝแžš | แžœแžถแž™ ------------------+-------------------------- ash_time | แžแŸ’แžšแžถแž–แŸแž›แžœแŸแž›แžถแž‡แžถแž˜แžฝแž™แžแŸ†แž”แž“แŸ‹แž–แŸแž›แžœแŸแž›แžถ datid | แžˆแŸ’แž˜แŸ„แŸ‡แž€แžถแž›แž”แžšแžทแž…แŸ’แž†แŸแž‘ | แžขแžแŸ’แžแž”แž‘ pid | แž…แŸ†แž“แžฝแž“แž‚แžแŸ‹แž”แŸ’แžšแžพแžŸแŸŠแžธแžŠ | แžˆแŸ’แž˜แŸ„แŸ‡แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ oid | แžขแžแŸ’แžแž”แž‘ application_name | แžขแžแŸ’แžแž”แž‘ client_addr | text client_hostname | text client_port | แž…แŸ†แž“แžฝแž“แž‚แžแŸ‹ backend_start | แžแŸ’แžšแžถแž–แŸแž›แžœแŸแž›แžถแž‡แžถแž˜แžฝแž™แžแŸ†แž”แž“แŸ‹แž–แŸแž›แžœแŸแž›แžถ xact_start | แžแŸ’แžšแžถแž–แŸแž›แžœแŸแž›แžถแž‡แžถแž˜แžฝแž™แžแŸ†แž”แž“แŸ‹แž–แŸแž›แžœแŸแž›แžถ query_start | แžแŸ’แžšแžถแž–แŸแž›แžœแŸแž›แžถแž‡แžถแž˜แžฝแž™แžแŸ†แž”แž“แŸ‹แž–แŸแž›แžœแŸแž›แžถ state_change | แžแŸ’แžšแžถแž–แŸแž›แžœแŸแž›แžถแž‡แžถแž˜แžฝแž™แžแŸ†แž”แž“แŸ‹แž–แŸแž›แžœแŸแž›แžถ wait_event_type | แžขแžแŸ’แžแž”แž‘ wait_event | แžŸแŸ’แžแžถแž“แž—แžถแž–แžขแžแŸ’แžแž”แž‘ | แžขแžแŸ’แžแž”แž‘ backend_xid | xid backend_xmin | xid top_level_query | แžŸแŸ†แžŽแžฝแžšแžขแžแŸ’แžแž”แž‘ | แžขแžแŸ’แžแž”แž‘แžŸแŸ†แžŽแžฝแžš | bigint backend_type | แžขแžแŸ’แžแž”แž‘                     

แž˜แžทแž“แž‘แžถแž“แŸ‹แž˜แžถแž“แž€แž‰แŸ’แž…แž”แŸ‹แžŠแŸ‚แž›แžแŸ’แžšแŸ€แž˜แžšแžฝแž…แž‡แžถแžŸแŸ’แžšแŸแž…แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžŠแŸ†แžกแžพแž„แž“แŸ…แžกแžพแž™แž‘แŸแŸ” แžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แžŸแŸ’แž“แžพแžฑแŸ’แž™แž‘แžถแž‰แž™แž€แž”แŸ’แžšแž—แž– แž“แžทแž„แž”แŸ’แžšแž˜แžผแž›แž•แŸ’แžแžปแŸ†แž”แžŽแŸ’แžŽแžถแž›แŸแž™แžŠแŸ„แž™แžแŸ’แž›แžฝแž“แžฏแž„แŸ” แžŠแŸ†แž”แžผแž„แžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแžŠแŸ†แžกแžพแž„แž€แž‰แŸ’แž…แž”แŸ‹ "devel" แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€ แž แžพแž™แž€แŸ†แžŽแžแŸ‹แž•แŸ’แž›แžผแžœแž‘แŸ… pg_config แž“แŸ…แž€แŸ’แž“แžปแž„แžขแžแŸแžš PATH แŸ” แž™แžพแž„แž”แŸ’แžšแž˜แžผแž›แŸ–

แžŸแŸŠแžธแžŒแžธ 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 (แžขแŸ’แž“แž€แžขแžถแž…แž‘แžถแž‰แž™แž€แž”แŸ’แžšแž–แŸแž“แŸ’แž’แž‚แŸ„แž›แž–แžธแžšแžŠแŸ‚แž›แž”แŸ’แžšแž˜แžผแž›แž”แžถแž“แž“แŸ…แž€แŸ’แž“แžปแž„แž•แŸ’แž“แŸ‚แž€ แžŸแŸแž…แž€แŸ’แžแžธแž”แŸ’แžšแž€แžถแžŸ).

แž“แŸ…แž–แŸแž›แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜ PASH-Viewer (แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž–แžธแž€แŸ†แžŽแŸ‚ 0.4.0) แž–แžทแž“แžทแžแŸ’แž™แžšแž€แž˜แžพแž›แžœแžแŸ’แžแž˜แžถแž“แž“แŸƒแž‘แžทแžŠแŸ’แž‹แž—แžถแž– pg_active_session_history แž แžพแž™แž”แŸ’แžšแžŸแžทแž“แž”แžพแžœแžถแž˜แžถแž“ แž“แŸ„แŸ‡แžœแžถแž•แŸ’แž‘แžปแž€แž”แŸ’แžšแžœแžแŸ’แžแžทแž”แŸ’แžšแž˜แžผแž›แž‘แžถแŸ†แž„แž˜แžผแž›แž–แžธแžœแžถ แž แžพแž™แž”แž“แŸ’แžแžขแžถแž“แž‘แžทแž“แŸ’แž“แž“แŸแž™แž…แžผแž›แžแŸ’แž˜แžธ แžŠแŸ„แž™แž’แŸ’แžœแžพแž”แž…แŸ’แž…แžปแž”แŸ’แž”แž“แŸ’แž“แž—แžถแž–แž€แŸ’แžšแžถแž แŸ’แžœแžšแŸ€แž„แžšแžถแž›แŸ‹ 15 แžœแžทแž“แžถแž‘แžธแŸ”

แž”แŸ’แžšแžœแžแŸ’แžแžทแžŸแž˜แŸแž™แžŸแž€แž˜แŸ’แž˜ PostgreSQL - แž•แŸ’แž“แŸ‚แž€แž”แž“แŸ’แžแŸ‚แž˜ pgsentinel แžแŸ’แž˜แžธแŸ”

แž”แŸ’แžšแž—แž–: www.habr.com

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹