{"id":30767,"date":"2019-10-31T21:37:21","date_gmt":"2019-10-31T18:37:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sintez-kak-odin-iz-metodov-uluchsheniya-proizvoditelnosti-postgresql\/"},"modified":"2019-10-31T21:37:21","modified_gmt":"2019-10-31T18:37:21","slug":"sintez-kak-odin-iz-metodov-uluchsheniya-proizvoditelnosti-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/sintez-kak-odin-iz-metodov-uluchsheniya-proizvoditelnosti-postgresql","title":{"rendered":"Synthesis as one of the methods for improving PostgreSQL performance","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Synthesis as one of the methods for improving PostgreSQL performance\" src=\"\/wp-content\/uploads\/2019\/04\/6960ab96e829332fbde0b2aebd79b48a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Philosophical Introduction<\/h3>\n<p>\nAs is known, there are only two methods for solving problems:<\/p>\n<ol>\n<li>The analysis method or the deduction method, from general to specific.<\/li>\n<li>The synthesis method or the induction method, from specific to general.<\/li>\n<\/ol>\n<p>\nTo address the issue of 'improving database performance,' this might look as follows.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b>Analysis<\/b> \u2014 we break down the problem into its individual parts and solve them in an attempt to improve the overall database performance.<\/p>\n<p>In practice, analysis looks something like this:<\/p>\n<ul>\n<li>A problem arises (performance incident) <\/li>\n<li>We collect statistical information about the state of the database<\/li>\n<li>We look for bottlenecks<\/li>\n<li>We resolve issues at the bottlenecks<\/li>\n<\/ul>\n<p>\n<b>Database bottlenecks<\/b> \u2014 infrastructure (CPU, Memory, Disks, Network, OS), settings (postgresql.conf), queries:<\/p>\n<p><b>Infrastructure<\/b>: the possibilities for influence and changes for the engineer are almost zero.<\/p>\n<p><b>Database settings<\/b>: the possibilities for changes are slightly greater than in the previous case, but generally still quite challenging, especially in the cloud.<\/p>\n<p><b>Requests<\/b> to the database: <u>the only area for maneuvering<\/u>.<\/p>\n<p><b>Synthesis<\/b> \u2014 we improve the performance of individual parts, expecting that in turn, the performance of the database will improve. <\/p>\n<h3>Lyrical Introduction or Why All This Matters <\/h3>\n<p>\nHow the process of resolving performance incidents occurs if the database performance is not monitored: <\/p>\n<p>Client - 'we have issues, it's slow, make it work well for us'<br \/>\nEngineer - 'how bad is it?'<br \/>\nClient - 'this is how it is now (an hour ago, yesterday, during the last situation), it's slow'<br \/>\nEngineer - 'when was it good?'<br \/>\nClient - 'a week (two weeks) ago it was decent.' (Lucky me)<br \/>\nClient - 'I don't remember when it was good, but now it's bad' (A typical response)<\/p>\n<p>As a result, a classic picture emerges:<\/p>\n<p><img decoding=\"async\" alt=\"Synthesis as one of the methods for improving PostgreSQL performance\" src=\"\/wp-content\/uploads\/2019\/04\/836777a3f813b1f5c36cc23aa5af6ad0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Who is to blame and what to do?<\/h3>\n<p>\nThe first part of the question is the easiest to answer \u2014 it's always the DBA engineer's fault. <\/p>\n<p>The second part is also not too complicated \u2014 we need to implement a database performance monitoring system.<\/p>\n<p>The first question arises \u2014 <b>what to monitor?<\/b><\/p>\n<p><b>Path 1. We will monitor EVERYTHING<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Synthesis as one of the methods for improving PostgreSQL performance\" src=\"\/wp-content\/uploads\/2019\/04\/9aa90bcce679e67d1749e270828cf792.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCPU load, the number of disk read\/write operations, allocated memory size, and a megaton of different counters that any decent monitoring system can provide.<\/p>\n<p>As a result, we end up with a flurry of graphs, summary tables, continuous email alerts, and a 100% workload for engineers responding to a multitude of identical tickets, usually with the standard phrase \u2014 \u201cTemporary issue. No action needed.\u201d However, everyone is busy, and there is always something to show to the client \u2014 work is underway.<\/p>\n<h3>Path 2. Monitor only what is necessary, while what is not needed should not be monitored.<\/h3>\n<p>\nMonitoring can be done slightly differently \u2014 only entities and events:<\/p>\n<ul>\n<li>To which the DBA engineer can apply influence.<\/li>\n<li>For which there is an action algorithm in case an event or entity changes.<\/li>\n<\/ul>\n<p>\nBased on this assumption and recalling \u201c<b>Philosophical Introduction<\/b>\u201d in order to avoid regular repetition of \u201c<b>Lyrical Introduction or Why All This Matters<\/b>\u201d, it makes sense to monitor the performance of individual queries for optimization and analysis, which should ultimately lead to an improvement in the overall performance of the database. <\/p>\n<p>However, to improve a heavy query that affects the overall performance of the database, it must first be identified. <\/p>\n<p>Thus, two interrelated questions arise:<\/p>\n<ul>\n<li>what constitutes a heavy query? <\/li>\n<li>how to find heavy queries.<\/li>\n<\/ul>\n<p>\nClearly, a heavy query is one that consumes a lot of OS resources to produce a result.<\/p>\n<p><b>Now, let's move on to the second question \u2014 how to find and subsequently monitor heavy queries?<\/b><\/p>\n<h3>What monitoring options are available for queries in PostgreSQL? <\/h3>\n<p>\nCompared to Oracle, options are somewhat limited, but you can still accomplish certain tasks.<\/p>\n<p><img decoding=\"async\" alt=\"Synthesis as one of the methods for improving PostgreSQL performance\" src=\"\/wp-content\/uploads\/2019\/04\/995419a92c0b340512bef6221e76822f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>PG_STAT_STATEMENTS<\/h3>\n<p>\nThe standard extension pg_stat_statements is designed for finding and monitoring heavy queries in PostgreSQL.<\/p>\n<p>After installing the extension, a view with the same name appears in the target database, which must be used for monitoring purposes.<\/p>\n<p>Target columns in pg_stat_statements for building a monitoring system:<\/p>\n<ul>\n<li><b>queryid <\/b>An internal hash code calculated from the parse tree of the statement.<\/li>\n<li><b>max_time <\/b>Maximum time spent on the statement, in milliseconds.<\/li>\n<\/ul>\n<p>\nBy accumulating and using statistics based on these two columns, a monitoring system can be built.<\/p>\n<h3>How pg_stat_statements is used for monitoring PostgreSQL performance<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Synthesis as one of the methods for improving PostgreSQL performance\" src=\"\/wp-content\/uploads\/2019\/04\/fbec099eb6ff2de2fb3c90c7cbcf9505.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo monitor query performance, the following is used:<br \/>\nOn the side of the target database \u2014 the pg_stat_statements view. <br \/>\nFrom the side <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/en\/server\/dts-los-angeles\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3479\">server<\/a> of the monitoring database \u2014 a set of bash scripts and service tables.<\/p>\n<h3>Stage 1 \u2014 Data Collection<\/h3>\n<p>\nOn the monitoring host, a cron job regularly runs a script that copies the contents of the pg_stat_statements view from the target database to the pg_stat_history table in the monitoring database. <\/p>\n<p>This way, a history of individual query executions is created, which can be used to generate performance reports and configure metrics.<\/p>\n<h3>Stage 2 \u2014 Performance Metrics Configuration<\/h3>\n<p>\nBased on the collected data, we select the queries whose execution is most critical\/important for the client (application). In agreement with the client, we set the performance metric values using the queryid and max_time fields. <\/p>\n<h3>Result \u2014 Start of Performance Monitoring<\/h3>\n<p><\/p>\n<ol>\n<li>When the monitoring script starts, it checks the configured performance metrics, comparing the max_time metric value with the value from the pg_stat_statements view in the target database.<\/li>\n<li>If the value in the target database exceeds the metric value, a warning (an incident in the ticketing system) is generated.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Additional Feature 1<\/h3>\n<p>\n<b>History of Query Execution Plans<\/b><\/p>\n<p>For subsequent resolution of performance incidents, it is very useful to have a history of changes to query execution plans. <\/p>\n<p>To store the history, a service table log_query is used. This table is populated by analyzing the loaded PostgreSQL log file. Unlike the pg_stat_statements view, the log file contains the full text with the execution parameter values, not just normalized text, allowing for logging not only the time and duration of queries but also storing the execution plans at the current moment.<\/p>\n<h3>Additional Feature 2<\/h3>\n<p>\n<b>Continuous Performance Improvement Process<\/b><\/p>\n<p>Monitoring individual queries is generally not intended for the task of continuously improving the performance of the database as a whole since it only monitors and addresses performance issues for individual queries. However, the method can be extended to configure monitoring for all database queries. <\/p>\n<p>For this, additional performance metrics need to be introduced:<\/p>\n<ul>\n<li>Over the past few days<\/li>\n<li>For the baseline period<\/li>\n<\/ul>\n<p>\nThe script selects queries from the pg_stat_statements view in the target database and compares the max_time value with the average max_time, in the first case for the last days or for the selected time period (baseline), and in the second case.<\/p>\n<p>Thus, in the event of performance degradation for any query, a warning will be generated automatically, without manual report analysis. <\/p>\n<h3>What does synthesis have to do with it?<\/h3>\n<p>\nIn the described approach, as the synthesis method suggests \u2014 by improving individual parts of the system, we enhance the system as a whole.<\/p>\n<ul>\n<li>Query executed by the database \u2013 thesis<\/li>\n<li>Modified query \u2013 antithesis<\/li>\n<li>Change in the state of the system \u2014 synthesis<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Synthesis as one of the methods for improving PostgreSQL performance\" src=\"\/wp-content\/uploads\/2019\/04\/088abb9900319353a42d236d26a20a2c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>System Development<\/h3>\n<p><\/p>\n<ul>\n<li>Extending the collected statistics by adding history for the pg_stat_activity system view<\/li>\n<li>Extending the collected statistics by adding history for the statistics of individual tables involved in the queries <\/li>\n<li>Integration with the monitoring system in the AWS cloud<\/li>\n<li>And also, something else can be thought of\u2026<\/li>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444988\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u043e\u0435 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447: \u041c\u0435\u0442\u043e\u0434 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u0434\u0435\u0434\u0443\u043a\u0446\u0438\u0438, \u0438\u043b\u0438 \u043e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043a \u0447\u0430\u0441\u0442\u043d\u043e\u043c\u0443. \u041c\u0435\u0442\u043e\u0434 \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u0438\u043d\u0434\u0443\u043a\u0446\u0438\u0438, \u0438\u043b\u0438 \u043e\u0442 \u0447\u0430\u0441\u0442\u043d\u043e\u0433\u043e \u043a \u043e\u0431\u0449\u0435\u043c\u0443. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u201c\u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u201d \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0410\u043d\u0430\u043b\u0438\u0437 \u2014 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438 \u0440\u0435\u0448\u0430\u044f \u0438\u0445 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22752,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30767","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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u043e\u0435.\" \/>\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\/sintez-kak-odin-iz-metodov-uluchsheniya-proizvoditelnosti-postgresql\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\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\u0421\u0438\u043d\u0442\u0435\u0437 \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 PostgreSQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u043e\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/sintez-kak-odin-iz-metodov-uluchsheniya-proizvoditelnosti-postgresql\" \/>\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-31T18:37:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:21+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\udd47Synthesis as one of the methods for improving PostgreSQL performance | ProHoster","description":"Philosophical.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/sintez-kak-odin-iz-metodov-uluchsheniya-proizvoditelnosti-postgresql","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\u0421\u0438\u043d\u0442\u0435\u0437 \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 PostgreSQL | ProHoster","og:description":"\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u043e\u0435.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/sintez-kak-odin-iz-metodov-uluchsheniya-proizvoditelnosti-postgresql","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-31T18:37:21+00:00","article:modified_time":"2019-10-31T18:37:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30767","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-02-22 15:31:13","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:29:57","updated":"2026-02-22 15:31:13","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\/30767","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=30767"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/30767\/revisions"}],"predecessor-version":[{"id":162005,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/30767\/revisions\/162005"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/22752"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=30767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=30767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=30767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}