рд╣рдо PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ - рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╛рдд рдХреА рдереА рдХрд┐ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реИрдХрдбрд╝реЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд▓реЙрдЧ рдореЙрдиреАрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ "рдХреИрдЪ" рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд▓реЙрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдбреАрдмреАрдПрдордПрд╕ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдг рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдирд╛ рдкрд╛рдк рд╣реИред

рд╕рдЪ рд╣реИ, рдЕрдЧрд░ рдЖрдк рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдХрдВрд╕реЛрд▓ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБрдд рдЬрд▓реНрджреА рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓рд╛рдн рдХреЗ рдЪрдХреНрдХрд░ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдз рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рд╕рднреА рдЙрдЪрд┐рдд рд╕реАрдорд╛рдУрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред


рдЗрд╕рд▓рд┐рдП, рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ Zabbix рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдб-рдСрди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрди рдкрд░ рд╕рднреА рд╕рд░реНрд╡рд░ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд┐рдЧрд░рд╛рдиреА рдирд┐рдпрдо рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдЖрдЬ рдХрд╛ рд▓реЗрдЦ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдбрд╛рдпрдирд╛рдорд┐рдХреНрд╕ рдХреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рдмреЗрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рджреЗрдЦ рдХрд░ рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдЫрд┐рдкреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╕рдВрдкрд░реНрдХ рд╕реНрдерд┐рддрд┐


рдмрд╣реБрдд рдкрд╣рд▓реЗ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ "рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ / рдпрд╣ рдмреБрд░рд╛ рдерд╛" рд╡рд┐рд╖рдп рдкрд░ рд╕рднреА рдЕрд╕рд╣рдорддрд┐ pg_stat_activity рдХреА рд╕рд╛рд░рд╛рдВрд╢ рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд░рд╣реА рд╣реИ :



рдмрд╛рдПрдВ рдЧреНрд░рд╛рдлрд╝ рдкрд░ рд╣рдо рдЙрди рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рджрд╛рдИрдВ рдУрд░ - рдЬреЛ рдХреБрдЫ рд╣реИрдВ рдХрд░рдирд╛ред рдкреАрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ pg_stat_activity.state/wait_eventрдФрд░ / рдпрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд╛рда рд╕реЗ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИред

рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рд╣реИ :

  • рдмрд╣реБрдд рдХрдоidle - рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдЖрдк рдПрдХ рдФрд░ рдПрдХ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдирдП рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗред
  • idle ┬л┬╗ , max_connections.
  • idle in transaction тАФ , - pgbouncer. .

    , , idle_in_transaction_session_timeout.
  • wait тАФ - ┬л┬╗ . тАФ .

    , ┬л┬╗ pg_terminate_backend(pid).
  • active ( max-) , ┬л┬╗. - (, ┬л ┬╗) , , тАж

    тАФ , ┬л┬╗ .
  • maintenance тАФ , - :

    query ~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)'

    рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдЯреЛрд╡реИрдХреНрдпреВрдо / рдСрдЯреЛрдПрдирд▓рд┐рдЬрд╝ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдиреБрдХрд╕рд╛рди рдХреЗрд╡рд▓ "рдПрдХреНрд╕рдЯреНрд░реЙрдирд┐рдХ" рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдореЛрдбрд╝ autovacuum_max_workersрдФрд░ autovacuum_naptime, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдВ - рдЖрдкрдХреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред

    рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрдврд╝рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ wait, рдФрд░maintenance , рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдбреАрдмреАрдП рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЛрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЖрдзреЗ рдЕрд╡рд╕рд░ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛ред

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╣рдЯрд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

рдХрдиреЗрдХреНрд╢рди рдФрд░ рд▓реЙрдХ рдХреА рд╕реНрдерд┐рддрд┐
WITH event_types(wait_event_type) AS(
  VALUES
    ('lwlock')
  , ('lock')
  , ('bufferpin')
  , ('client')
  , ('extension')
  , ('ipc')
  , ('timeout')
  , ('io')
)
, events(wait_event) AS(
  VALUES
    ('walwritelock')
  , ('wal_insert')
  , ('buffer_content')
  , ('buffer_io')
  , ('lock_manager')
  , ('relation')
  , ('extend')
  , ('page')
  , ('tuple')
  , ('transactionid')
  , ('virtualxid')
  , ('speculative token')
  , ('object')
  , ('userlock')
  , ('advisory')
  , ('clientread')
  , ('datafileextend')
  , ('datafileread')
  , ('datafilewrite')
  , ('slruread')
  , ('slruwrite')
)
, states(state) AS(
  VALUES
    ('running')
  , ('maintenance')
  , ('waiting')
  , ('transaction')
  , ('idle')
)
, stats AS(
  SELECT
    pid
  , datname
  , state
  , lower(wait_event_type) wait_event_type
  , lower(wait_event) wait_event
  , query
  FROM
    pg_stat_activity
  WHERE
    pid <> pg_backend_pid()
)
, dbs AS(
  SELECT
    datname
  FROM
    pg_database db
  WHERE
    NOT db.datistemplate
)
  SELECT
    date_part('epoch', now())::integer ts
  , coalesce(s.qty, 0) val
  , dbs.datname dbname
  , states.state
  , true total
  FROM
    dbs
  CROSS JOIN
    states
  NATURAL LEFT JOIN
    (
      SELECT
        datname
      , CASE
          WHEN query ~* E'^(\\s*(--[^\\n]*\\n|/\\*.*\\*/|\\n))*(autovacuum|VACUUM|ANALYZE|REINDEX|CLUSTER|CREATE|ALTER|TRUNCATE|DROP)' THEN
            'maintenance'
          WHEN wait_event IS NOT NULL AND
            wait_event <> 'clientread' AND
            state = 'active' THEN
            'waiting'
          WHEN state = 'active' THEN
            'running'
          WHEN state = 'idle' THEN
            'idle'
          WHEN state IN ('idle in transaction', 'idle in transaction (aborted)') THEN
            'transaction'
          WHEN state = 'fastpath function call' THEN
            'fastpath'
          ELSE
            'disabled'
        END state
      , count(*) qty
      FROM
        stats
      GROUP BY
        1, 2
    ) s
UNION
  SELECT
    date_part('epoch', now())::integer ts
  , coalesce(t.qty, 0) val
  , dbs.datname dbname
  , event_types.wait_event_type
  , false total
  FROM
    dbs
  CROSS JOIN
    event_types
  NATURAL LEFT JOIN
    (
      SELECT
        datname
      , wait_event_type
      , count(*) qty
      FROM
        stats
      WHERE
        wait_event_type IS NOT NULL
      GROUP BY
        1, 2
    ) t
UNION
  SELECT
    date_part('epoch', now())::integer ts
  , coalesce(e.qty, 0) val
  , dbs.datname dbname
  , events.wait_event
  , false total
  FROM
    dbs
  CROSS JOIN
    events
  NATURAL LEFT JOIN
    (
      SELECT
        datname
      , wait_event
      , count(*) qty
      FROM
        stats
      WHERE
        wait_event IS NOT NULL
      GROUP BY
        1, 2
    ) e;

рддрд╛рд▓реЗ


рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рддрд╛рд▓реЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдкрд░ рдЫреБрдЖ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ PostgreSQL рдЙрдиреНрд╣реЗрдВ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ:



рдЗрдирдореЗрдВ рд╕реЗ, рд╣рдо рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:

  • Exclusive - рдЖрдорддреМрд░ рдкрд░ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд░рд┐рдХреЙрд░реНрдб рдкрд░ рддрд╛рд▓рд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • AccessExclusive - рдореЗрдЬ рдкрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╕рдордпред

рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рддрд╛рд▓реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд░рдмрд░ рдирд╣реАрдВ рд╣реИ :
рджреЛрдиреЛрдВ рд╕рд▓рд╛рд╣рдХрд╛рд░ рдФрд░ рдирд┐рдпрдорд┐рдд рддрд╛рд▓реЗ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЖрдХрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ max_locks_per_transactionрдФрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ max_connectionsред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдореЗрдореЛрд░реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рднреА рд▓реЙрдХ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд╛рд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЖрдорддреМрд░ рдкрд░ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджрд╕рд┐рдпреЛрдВ рдпрд╛ рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╛рд░реЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрддреА рд╣реИред
рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рд╕реНрдерд┐рддрд┐ рддрдм рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди "рдкреНрд░рд╡рд╛рд╣" рдФрд░ рд╕рдВрд╕рд╛рдзрди рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдбреЗрдЯрд╛рдмреЗрд╕, рд▓реЗрдирджреЗрди рд╕рдВрджрд░реНрдн, рдпрд╛ рд╕рд▓рд╛рд╣рдХрд╛рд░ рддрд╛рд▓реЗ рд╕реЗ рдХрдиреЗрдХреНрд╢рди ред рдЗрд╕рд▓рд┐рдП, рд╕рдордЧреНрд░ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд▓реЗрдирджреЗрди (рдЯреАрдкреАрдПрд╕)


рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдп pg_stat_database рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдХрдИ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИрдВ, рддреЛ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдРрд╕рд╛ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИpostgres ред

рдЯреАрдкреАрдПрд╕ рдФрд░ рдЯреНрдпреВрдкрд▓реНрд╕
SELECT
  extract(epoch from now())::integer ts
, datname dbname
, pg_stat_get_db_tuples_returned(oid) tup_returned
, pg_stat_get_db_tuples_fetched(oid) tup_fetched
, pg_stat_get_db_tuples_inserted(oid) tup_inserted
, pg_stat_get_db_tuples_updated(oid) tup_updated
, pg_stat_get_db_tuples_deleted(oid) tup_deleted
, pg_stat_get_db_xact_commit(oid) xact_commit
, pg_stat_get_db_xact_rollback(oid) xact_rollback
FROM
  pg_database
WHERE
  NOT datistemplate;

рдореИрдВ рдЕрд▓рдЧ рд╕реЗ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рди рдХрд░реЗрдВ !



рдЗрд╕ рдЧреНрд░рд╛рдл рдореЗрдВ, рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдпреЛрдЬрд┐рдд ( commit) рд▓реЗрдирджреЗрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдЪрд╛рдирдХ рд╢рд┐рдЦрд░ рд╡реГрджреНрдзрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╣ рдПрдХ-рдкрд░-рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЛрдб рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рд▓реЗрдирджреЗрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 4 рдЧреБрдирд╛ рд╡реГрджреНрдзрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢рд┐рдЦрд░ рдХреЛ рдЬреАрд╡рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рджрд░реНрд╢рди рдЖрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред

рдЦреИрд░, rollbackрд▓реЗрди-рджреЗрди рдХрд╛ рд░реЛрд▓рдмреИрдХ ( ) рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ ROLLBACK, рдпрд╛ рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред

рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрди рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдиреБрдХреНрд░рдорд┐рдд / рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдШрдЯрд╛рддреЗ рд╣реИрдВ:



  • tuples.returned тАФ , ┬л┬╗ .
  • tuples.fetched тАФ , ┬л ┬╗ Rows Removed by Filter, ┬л┬╗ .
  • tuples.ratio тАФ , , 1, тАФ . , , , .

рдпрджрд┐ рдЖрдк рдПрдХ рддреЗрдЬ рдЪреЛрдЯреА рдХрд╛tuples.ratio рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рд▓реЙрдЧ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдЙрдирдХреЗ рдЙрдкрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╢реНрд░реЗрдгреА рд╕реЗ рдХреБрдЫ рдЕрдкреНрд░рднрд╛рд╡реА рдЕрдиреБрд░реЛрдз рдорд┐рд▓реЗрдЧрд╛ ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рднрд▓реЗ рд╣реА ratioрдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд┐рдЦрд░ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛returned/fetched - рдпрд╣ рднреА рдЕрдЪреНрдЫреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдкрд░реЗрд╢рд╛рдиреА рд╣реИ, рдЬреИрд╕реЗ:

Hash Join
  - Hash
    - Seq Scan on BIG_TABLE
  - Index Scan ...

Merge Join
  - Index Scan on BIG_INDEX
  - Index Scan ...

рдЬрдм рд╕реЗ рд╣рдордиреЗ рдЬрд╛рдВрдЪ рд╢реБрд░реВ рдХреА рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдкрдврд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рддрдирд╛ рд░рд┐рдХреЙрд░реНрдб рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рддрдирд╛ Seq Scan:



рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдВрдХреЗрддрдХреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдирд┐рдпреЛрдЬрд┐рдд рд╡реГрджреНрдзрд┐ рд╕реЗ рд╕рдВрджреЗрд╣ рдкреИрджрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдкрдХреЛ рд╣рд░ рд░рд╛рдд 10M рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рдкреВрд░реА рдкреНрд▓реЗрдЯ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рджрд┐рди рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЛрдЯреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ disassembly рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░рдг рд╣реИред

рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рднреА рдорд╛рд╕-рд╡рд┐рд╕рдВрдЧрддрд┐ рдЖрд╡реЗрд╖рдг / рдЕрджреНрдпрддрди / рд╣рдЯрд╛рддрд╛ рд╣реИ:



рдбреЗрдЯрд╛ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рд╕рд╛рд░ рд╕рд░реНрд╡рд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рдХреИрд╕реЗ рдЦрд░рд╛рдм рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛ рдкреГрд╖реНрдареЛрдВ рдФрд░ рдЕрдиреБрдкрд╛рдд рдХреЗblock.read/hit рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдХреЛ рдбрд┐рд╕реНрдХ рд╕реЗ ( shared readрдпреЛрдЬрдирд╛ рдиреЛрдб рдкрд░) "рдкрдврд╝рдирд╛" рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП, рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ( shared hit), рдЪреВрдВрдХрд┐ рдбрд┐рд╕реНрдХ рддрдХ рдкрд╣реБрдВрдЪ рд╣рдореЗрд╢рд╛ рдзреАрдореА рд╣реЛрддреА рд╣реИ ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреАрдХ рд╕рдордп рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдХрд╛рд░рдг рд╣реИ:



рд╕рдмрд╕реЗ рд▓рдВрдмрд╛ рдЕрдиреБрд░реЛрдз / рд▓реЗрди-рджреЗрди


MVCC рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╕реНрдд рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдФрд░ рд▓реЗрдирджреЗрди рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдЖрдкрджрд╛ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдФрд░ рдЪрд┐рддреНрд░ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рдкрдврд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЖрдк рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреА рдХреИрд╕реЗ рдЬреАрд╡рд┐рдд рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред



рдРрд╕реЗ рдЦрд▓рдирд╛рдпрдХреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ pg_stat_activity.query_start/xact_startред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЗрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдПрдХ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬрд╣рд╛рдВ "рдЖрдЧреЗ" рдЦреЛрджрдирд╛ рд╣реИ:

  • рдЖрд╡реЗрджрди рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ
  • рдЕрд╕рдлрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ
  • рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдбрд╛рд▓реЗрдВ
  • ... рдпрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓реЛрдб рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордп рдореЗрдВ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИ

All Articles