PostgreSQL рд╕рдХреНрд░рд┐рдп рд╕рддреНрд░ рдЗрддрд┐рд╣рд╛рд╕ - рдирд╡реАрди pgsentinel рд╡рд┐рд╕реНрддрд╛рд░

рдлрд░реНрдо pgsentinel рддреНрдпрд╛рдЪ рдирд╛рд╡рд╛рдЪрд╛ pgsentinel рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЛрдбрд▓рд╛ (github рднрд╛рдВрдбрд╛рд░), рдЬреЗ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓рдордзреНрдпреЗ pg_active_session_history рджреГрд╢реНрдп рдЬреЛрдбрддреЗ тАФ рд╕рдХреНрд░рд┐рдп рд╕рддреНрд░рд╛рдВрдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕ (Oracle рдЪреНрдпрд╛ v$active_session_history рдкреНрд░рдорд╛рдгреЗ).

рдореВрд▓рдд:, рд╣реЗ pg_stat_activity рдордзреАрд▓ рдлрдХреНрдд рд╕реЗрдХрдВрдж-рдмрд╛рдп-рд╕реЗрдХрдВрдж рд╕реНрдиреЕрдкрд╢реЙрдЯ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдореБрджреНрджреЗ рдЖрд╣реЗрдд:

  1. рд╕рд░реНрд╡ рдЬрдорд╛ рдХреЗрд▓реЗрд▓реА рдорд╛рд╣рд┐рддреА рдХреЗрд╡рд│ RAM рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рдореЗрдорд░реА рд╡рд╛рдкрд░рд▓реЗрд▓реА рд░рдХреНрдХрдо рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ.
  2. queryid рдлреАрд▓реНрдб рдЬреЛрдбрд▓реЗ рдЖрд╣реЗ - pg_stat_statements рдПрдХреНрд╕реНрдЯреЗрдВрд╢рди рдордзреАрд▓ рд╕рдорд╛рди queryid (рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрдирд╛ рдЖрд╡рд╢реНрдпрдХ).
  3. top_level_query рдлреАрд▓реНрдб рдЬреЛрдбрд▓реЗ рдЖрд╣реЗ - рдХреНрд╡реЗрд░реАрдЪрд╛ рдордЬрдХреВрд░ рдЬрд┐рдереВрди рд╕рдзреНрдпрд╛рдЪреА рдХреНрд╡реЗрд░реА рдХреЙрд▓ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ (pl/pgsql рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕)


pg_active_session_history рдлреАрд▓реНрдбрдЪреА рд╕рдВрдкреВрд░реНрдг рдпрд╛рджреА:

      рд╕реНрддрдВрдн | рдкреНрд░рдХрд╛рд░
------------------+--------------------------------------
 рд░рд╛рдЦ_рд╡реЗрд│ | рдЯрд╛рдЗрдо рдЭреЛрди рд╕рд╣ рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк
 рджрд┐рдирд╛рдВрдХ | oid
 datname | рдордЬрдХреВрд░
 pid | рдкреВрд░реНрдгрд╛рдВрдХ
 useysid | oid
 рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡ | рдордЬрдХреВрд░
 рдЕрд░реНрдЬ_рдирд╛рд╡ | рдордЬрдХреВрд░
 client_addr | рдордЬрдХреВрд░
 client_hostname | рдордЬрдХреВрд░
 рдЧреНрд░рд╛рд╣рдХ_рдкреЛрд░реНрдЯ | рдкреВрд░реНрдгрд╛рдВрдХ
 backend_start | рдЯрд╛рдЗрдо рдЭреЛрди рд╕рд╣ рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк
 xact_start | рдЯрд╛рдЗрдо рдЭреЛрди рд╕рд╣ рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк
 query_start | рдЯрд╛рдЗрдо рдЭреЛрди рд╕рд╣ рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк
 рд░рд╛рдЬреНрдп_рдмрджрд▓ | рдЯрд╛рдЗрдо рдЭреЛрди рд╕рд╣ рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк
 рдкреНрд░рддреАрдХреНрд╖рд╛_рдЗрд╡реНрд╣реЗрдВрдЯ_рдкреНрд░рдХрд╛рд░ | рдордЬрдХреВрд░
 рдкреНрд░рддреАрдХреНрд╖рд╛_рдЗрд╡реНрд╣реЗрдВрдЯ | рдордЬрдХреВрд░
 рд░рд╛рдЬреНрдп | рдордЬрдХреВрд░
 backend_xid | xid
 backend_xmin | xid
 top_level_query | рдордЬрдХреВрд░
 рдХреНрд╡реЗрд░реА | рдордЬрдХреВрд░
 queryid | рдореЛрдард╛
 backend_type | рдордЬрдХреВрд░                     

рд╕реНрдерд╛рдкрдиреЗрд╕рд╛рдареА рдЕрджреНрдпрд╛рдк рдХреЛрдгрддреЗрд╣реА рддрдпрд╛рд░ рдкреЕрдХреЗрдЬ рдирд╛рд╣реА. рд╕реНрддреНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛ рдЖрдгрд┐ рд╕реНрд╡рддрдГ рд▓рд╛рдпрдмреНрд░рд░реА рдПрдХрддреНрд░ рдХрд░рд╛ рдЕрд╕реЗ рд╕реБрдЪрд╡рд▓реЗ рдЬрд╛рддреЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рдердо рддреБрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА тАЬdevelтАЭ рдкреЕрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ PATH рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ pg_config рдЪрд╛ рдорд╛рд░реНрдЧ рд╕реЗрдЯ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. рдЖрдореНрд╣реА рдЧреЛрд│рд╛ рдХрд░рддреЛ:

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-рджрд░реНрд╢рдХ (рддреБрдореНрд╣реА рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рд╕рдВрдХрд▓рд┐рдд рдмрд╛рдпрдирд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛ рдкреНрд░рдХрд╛рд╢рди).

рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛рдирд╛, PASH-Viewer (рдЖрд╡реГрддреНрддреА 0.4.0 рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдгрд╛рд░реЗ) pg_active_session_history рджреГрд╢реНрдпрд╛рдЪреА рдЙрдкрд╕реНрдерд┐рддреА рддрдкрд╛рд╕рддреЗ рдЖрдгрд┐ рддреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рддреНрдпрд╛рддреВрди рд╕рдВрдкреВрд░реНрдг рдЬрдорд╛ рдХреЗрд▓реЗрд▓рд╛ рдЗрддрд┐рд╣рд╛рд╕ рд▓реЛрдб рдХрд░рддреЗ рдЖрдгрд┐ рдирд╡реАрди рдпреЗрдгрд╛рд░рд╛ рдбреЗрдЯрд╛ рд╡рд╛рдЪрдгреЗ рд╕реБрд░реВ рдареЗрд╡рддреЗ, рджрд░ 15 рд╕реЗрдХрдВрджрд╛рдВрдиреА рдЖрд▓реЗрдЦ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рддреЗ.

PostgreSQL рд╕рдХреНрд░рд┐рдп рд╕рддреНрд░ рдЗрддрд┐рд╣рд╛рд╕ - рдирд╡реАрди pgsentinel рд╡рд┐рд╕реНрддрд╛рд░

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛