PostgreSQL เดธเดœเต€เดต เดธเต†เดทเตป เดšเดฐเดฟเดคเตเดฐเด‚ - เดชเตเดคเดฟเดฏ pgsentinel เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด‚

เด•เดฎเตเดชเดจเดฟ pgsentinel เด…เดคเต‡ เดชเต‡เดฐเดฟเดฒเตเดณเตเดณ pgsentinel เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด‚ เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เดฟ (github เดถเต‡เด–เดฐเด‚), เด‡เดคเต PostgreSQL-เดฒเต‡เด•เตเด•เต pg_active_session_history เด•เดพเดดเตโ€Œเดš เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต - เดธเดœเต€เดต เดธเต†เดทเดจเตเด•เดณเตเดŸเต† เดšเดฐเดฟเดคเตเดฐเด‚ (Oracle's v$active_session_history เดชเต‹เดฒเต†).

เด…เดŸเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏเดฟ, เด‡เดต pg_stat_activity-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดธเต†เด•เตเด•เตปเดกเต-เดฌเตˆ-เดธเต†เด•เตเด•เตปเดกเต เดธเตเดจเดพเดชเตเดชเตเดทเต‹เดŸเตเดŸเตเด•เดณเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ เด‰เดฃเตเดŸเต:

  1. เดถเต‡เด–เดฐเดฟเดšเตเดš เดŽเดฒเตเดฒเดพ เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เดฑเดพเดฎเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดธเด‚เดญเดฐเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด•เดฏเตเดณเตเดณเต‚, เด•เต‚เดŸเดพเดคเต† เด…เดตเดธเดพเดจเดฎเดพเดฏเดฟ เดธเด‚เดญเดฐเดฟเดšเตเดš เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเตเดŸเต† เด‰เดชเดญเต‹เด—เด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต.
  2. เด•เตเดตเดฑเดฟเดกเต เดซเต€เตฝเดกเต เดšเต‡เตผเดคเตเดคเต - pg_stat_statements เดŽเด•เตเดธเตเดฑเตเดฑเตปเดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด…เดคเต‡ เด•เตเดตเดฑเดฟเดกเต (เดชเตเดฐเต€-เด‡เตปเดธเตเดฑเตเดฑเดฒเต‡เดทเตป เด†เดตเดถเตเดฏเดฎเดพเดฃเต).
  3. top_level_query เดซเต€เตฝเดกเต เดšเต‡เตผเดคเตเดคเต - เดจเดฟเดฒเดตเดฟเดฒเต† เด…เดจเตเดตเต‡เดทเดฃเด‚ เดตเดฟเดณเดฟเดšเตเดš เดšเต‹เดฆเตเดฏเดคเตเดคเดฟเดจเตเดฑเต† เดตเดพเดšเด•เด‚ (pl/pgsql เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ)


pg_active_session_history เดซเต€เตฝเดกเตเด•เดณเตเดŸเต† เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดฒเดฟเดธเตเดฑเตเดฑเต:

      เด•เต‹เดณเด‚ | เดŸเตˆเดชเตเดชเต ------------------+--------------------------- ash_time | เดŸเตˆเด‚ เดธเต‹เตบ datid เด‰เดณเตเดณ เดŸเตˆเด‚เดธเตเดฑเตเดฑเดพเดฎเตเดชเต | oid เดคเต€เดฏเดคเดฟ เดจเดพเดฎเด‚ | เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดชเดฟเดกเต | เดชเต‚เตผเดฃเตเดฃเดธเด‚เด–เตเดฏ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตysid | oid เด‰เดชเดฏเต‹เด—เดจเดพเดฎเด‚ | เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป_เดจเดพเดฎเด‚ | เดตเดพเดšเด•เด‚ client_addr | เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เด•เตเดฒเดฏเดจเตเดฑเต_เดนเต‹เดธเตเดฑเตเดฑเตโ€Œเดจเต†เดฏเดฟเด‚ | เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เด•เตเดฒเดฏเดจเตเดฑเต_เดชเต‹เตผเดŸเตเดŸเต | เดชเต‚เตผเดฃเตเดฃเดธเด‚เด–เตเดฏ เดฌเดพเด•เตเด•เต†เตปเดกเต_เด†เดฐเด‚เดญเด‚ | เดธเดฎเดฏ เดฎเต‡เด–เดฒ xact_start | เดŸเตˆเด‚ เดธเต‹เตบ เด•เตเดตเดฑเดฟ_เดธเตเดฑเตเดฑเดพเตผเดŸเตเดŸเต | เดธเดฎเดฏเดฎเต‡เด–เดฒเดพ เด…เดตเดธเตเดฅ_เดฎเดพเดฑเตเดฑเดคเตเดคเต‹เดŸเตเด•เต‚เดŸเดฟเดฏ เดŸเตˆเด‚เดธเตเดฑเตเดฑเดพเดฎเตเดชเต | เดŸเตˆเด‚ เดธเต‹เตบ เด‰เดณเตเดณ เดŸเตˆเด‚เดธเตเดฑเตเดฑเดพเดฎเตเดชเต เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•_event_type | เดตเดพเดšเด•เด‚ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•_เด‡เดตเดจเตเดฑเต | เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เด…เดตเดธเตเดฅ | เดŸเต†เด•เตเดธเตเดฑเตเดฑเต backend_xid | xid เดฌเดพเด•เตเด•เต†เตปเดกเต_xmin | xid top_level_query | เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดšเต‹เดฆเตเดฏเด‚ | เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เด•เตเดตเดฑเดฟเดกเต | เดฌเดฟเด—เดฟเดจเตเดฑเต เดฌเดพเด•เตเด•เต†เตปเดกเต_เดคเดฐเด‚ | เดตเดพเดšเด•เด‚                     

เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเดจเดพเดฏเดฟ เด‡เดคเตเดตเดฐเต† เด’เดฐเต เดฑเต†เดกเดฟเดฎเต†เดฏเตเดกเต เดชเดพเด•เตเด•เต‡เดœเต เด‡เดฒเตเดฒ. เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดฒเตˆเดฌเตเดฐเดฑเดฟ เดธเตเดตเดฏเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เดพเดจเตเด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเต†เตผเดตเดฑเดฟเดจเดพเดฏเดฟ "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-เดตเตเดฏเต‚เดตเตผ (เดชเดคเดฟเดชเตเดชเต 0.4.0 เดฎเตเดคเตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต) pg_active_session_history เด•เดพเดดเตโ€ŒเดšเดฏเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดถเต‡เด–เดฐเดฟเดšเตเดš เดฎเตเดดเตเดตเตป เดšเดฐเดฟเดคเตเดฐเดตเตเด‚ เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดชเตเดคเดฟเดฏ เด‡เตปเด•เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต เดคเตเดŸเดฐเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด“เดฐเต‹ 15 เดธเต†เด•เตเด•เตปเดกเดฟเดฒเตเด‚ เด—เตเดฐเดพเดซเต เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

PostgreSQL เดธเดœเต€เดต เดธเต†เดทเตป เดšเดฐเดฟเดคเตเดฐเด‚ - เดชเตเดคเดฟเดฏ pgsentinel เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด‚

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•