{"id":38073,"date":"2019-10-31T22:21:32","date_gmt":"2019-10-31T19:21:32","guid":{"rendered":"https:\/\/prohoster.info\/blog\/istoriya-aktivnyh-sessij-v-postgresql-novoe-rasshirenie-pgsentinel\/"},"modified":"2019-10-31T22:21:32","modified_gmt":"2019-10-31T19:21:32","slug":"istoriya-aktivnyh-sessij-v-postgresql-novoe-rasshirenie-pgsentinel","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/istoriya-aktivnyh-sessij-v-postgresql-novoe-rasshirenie-pgsentinel","title":{"rendered":"Active session history in PostgreSQL \u2014 a new pgsentinel extension","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Company <noindex><a rel=\"nofollow\" href=\"https:\/\/www.pgsentinel.com\/\">pgsentinel<\/a><\/noindex> released its eponymous extension pgsentinel (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgsentinel\/pgsentinel\">GitHub repository<\/a><\/noindex>), which adds the pg_active_session_history view to PostgreSQL \u2014 a history of active sessions (similar to Oracle's v$active_session_history).<\/p>\n<p>Essentially, these are simply snapshots from pg_stat_activity taken every second, but there are important points:<\/p>\n<ol>\n<li>All accumulated information is stored only in memory, and the amount of memory consumed is regulated by the number of recent records stored.<\/li>\n<li>A field named queryid is added \u2014 the same queryid from the pg_stat_statements extension (requires prior installation).<\/li>\n<li>A field named top_level_query is added \u2014 the text of the query that called the current query (in cases where pl\/pgsql is used)<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Complete list of fields in pg_active_session_history:<\/b><\/p>\n<pre>\n      Column      |           Type           \n------------------+--------------------------\n ash_time         | timestamp with time zone \n datid            | oid                      \n datname          | text                     \n pid              | integer                  \n usesysid         | oid                      \n usename          | text                     \n application_name | text                     \n client_addr      | text                     \n client_hostname  | text                     \n client_port      | integer                  \n backend_start    | timestamp with time zone \n xact_start       | timestamp with time zone \n query_start      | timestamp with time zone \n state_change     | timestamp with time zone \n wait_event_type  | text                     \n wait_event       | text                     \n state            | text                     \n backend_xid      | xid                      \n backend_xmin     | xid                      \n top_level_query  | text                     \n query            | text                     \n queryid          | bigint                   \n backend_type     | text                     \n<\/pre>\n<p>There is currently no precompiled package for installation. It is suggested to download the source code and build the library manually. You must first install the 'devel' package for your server and set the path to pg_config in the PATH variable. To build:<\/p>\n<blockquote><p>cd pgsentinel\/src<br \/>\nmake<br \/>\nmake install<\/p><\/blockquote>\n<p>\nAdd parameters to postgres.conf:<\/p>\n<blockquote><p>shared_preload_libraries = 'pg_stat_statements,pgsentinel'<br \/>\ntrack_activity_query_size = 2048<br \/>\npg_stat_statements.track = all<\/p>\n<p># \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439<br \/>\npgsentinel_ash.max_entries = 10000<\/p><\/blockquote>\n<p>\nRestart PostgreSQL and create the extension:<\/p>\n<blockquote><p>create extension pgsentinel;<\/p><\/blockquote>\n<p>\nThe accumulated information allows you to answer questions such as:<\/p>\n<ul>\n<li>Which sessions spent the most time in waits?<\/li>\n<li>Which sessions were the most active?<\/li>\n<li>Which queries were the most active?<\/li>\n<\/ul>\n<p>\nYou can, of course, get answers to these questions using SQL queries, but it's more convenient to visualize this on a graph, highlighting the time intervals of interest with your mouse. You can do this using the free program <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dbacvetkov\/PASH-Viewer\">PASH-Viewer<\/a><\/noindex> (download compiled binaries in the section <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dbacvetkov\/PASH-Viewer\/releases\">Releases<\/a><\/noindex>).<\/p>\n<p>When starting PASH-Viewer (starting from version 0.4.0), it checks for the presence of the pg_active_session_history view, and if it exists, it loads all accumulated history from it and continues to read new incoming data, updating the graph every 15 seconds.<\/p>\n<p><img decoding=\"async\" alt=\"Active session history in PostgreSQL \u2014 a new pgsentinel extension\" src=\"\/wp-content\/uploads\/2019\/09\/2517772983f6ad87c0a895c190043ae1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/416909\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f pgsentinel \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pgsentinel (\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 github), \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0432 PostgreSQL \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 pg_active_session_history \u2014 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 (\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043e\u0440\u0430\u043a\u043b\u043e\u0432\u043e\u0439 v$active_session_history). \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e-\u043d\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0436\u0435\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0435 \u0441\u043d\u0438\u043c\u043a\u0438 \u0438\u0437 pg_stat_activity, \u043d\u043e \u0435\u0441\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b: \u0412\u0441\u044f \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 queryid \u2014 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28580,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38073","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f pgsentinel \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pgsentinel (\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/istoriya-aktivnyh-sessij-v-postgresql-novoe-rasshirenie-pgsentinel\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u0432 PostgreSQL \u2014 \u043d\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pgsentinel | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f pgsentinel \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pgsentinel (\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/istoriya-aktivnyh-sessij-v-postgresql-novoe-rasshirenie-pgsentinel\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:21:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:21:32+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Active Session History in PostgreSQL \u2014 new pgsentinel extension | ProHoster","description":"The company pgsentinel has released the eponymous pgsentinel extension (","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/istoriya-aktivnyh-sessij-v-postgresql-novoe-rasshirenie-pgsentinel","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u0432 PostgreSQL \u2014 \u043d\u043e\u0432\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pgsentinel | ProHoster","og:description":"\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f pgsentinel \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u043e\u0434\u043d\u043e\u0438\u043c\u0451\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 pgsentinel (","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/istoriya-aktivnyh-sessij-v-postgresql-novoe-rasshirenie-pgsentinel","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:21:32+00:00","article:modified_time":"2019-10-31T19:21:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38073","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 20:21:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:15:23","updated":"2026-01-23 20:21:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=38073"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38073\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/28580"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=38073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=38073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=38073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}