{"id":200,"date":"2021-01-27T09:05:35","date_gmt":"2021-01-27T08:05:35","guid":{"rendered":"https:\/\/ptdb.ch\/?p=200"},"modified":"2021-01-27T09:05:35","modified_gmt":"2021-01-27T08:05:35","slug":"postgresql-temboard-performance-tuning","status":"publish","type":"post","link":"https:\/\/ptdb.ch\/?p=200","title":{"rendered":"PostgreSQL: temBoard Performance Tuning"},"content":{"rendered":"<p>A lot of things can be done, when it comes to performance tuning of the temBoard monitoring tool for PostgreSQL. The temBoard tool itself is very lightweight and already quite fast per default, however, if your environment grows you might need to tweak it a little bit.<\/p>\n<p>In this blog post I am going to highlight the things that I have done. The tuning tasks can be divided in 3 catagories.<\/p>\n<ul>\n<li><strong>OS tuning for temBoard<\/strong><\/li>\n<li><strong>temBoard server tuning<\/strong><\/li>\n<li><strong>temBoard agent tuning<\/strong><\/li>\n<\/ul>\n<p>On the OS I did the following changes. I implemented HugePages for the temBoard repository database, changed the XFS mount option to noatime,nodiratime and changed the Nice value of the temBoard systemd service.<\/p>\n<h3>OS tuning for temBoard<\/h3>\n<p>Implementing HugePages for the temBoard repository database<\/p>\n<p>To implement HugePages (and to disable Transparent HugePages) is a general good practice when it comes to PostgreSQL. There are several different ways to implement them. You can do it via tuned profiles, via grub, via sysctl.conf files and maybe some more. The configuration of HugePages is documented very well in the following blog posts and presentations, and so I am not going to repeat them.<\/p>\n<p><a href=\"https:\/\/blog.dbi-services.com\/configuring-huge-pages-for-your-postgresql-instance-redhatcentos-version\/\">https:\/\/blog.dbi-services.com\/configuring-huge-pages-for-your-postgresql-instance-redhatcentos-version\/<\/a><br \/>\n<a href=\"https:\/\/franckpachot.medium.com\/did-you-forget-to-allocate-huge-pages-on-your-postgresql-server-7a97e7727b03\">https:\/\/franckpachot.medium.com\/did-you-forget-to-allocate-huge-pages-on-your-postgresql-server-7a97e7727b03<\/a><br \/>\n<a href=\"https:\/\/archive.fosdem.org\/2019\/schedule\/event\/hugepages_databases\/\">https:\/\/archive.fosdem.org\/2019\/schedule\/event\/hugepages_databases\/<\/a><\/p>\n<p>I just want to point out, that it is important to have them, and to check if they are active.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$ cat postgresql.conf | grep shared_buffers\nshared_buffers = 8192MB\n\n$ cat \/proc\/meminfo | grep -i huge\nAnonHugePages:         0 kB\nHugePages_Total:    4320\nHugePages_Free:       85\nHugePages_Rsvd:        2\nHugePages_Surp:        0\nHugepagesize:       2048 kB\n\n$ cat \/etc\/sysctl.d\/91-hugepages.conf\nvm.nr_hugepages=4320\n\n$ pmap $(pgrep postgres) |  grep -E -- &quot;-s- .*deleted&quot; | sort -u\n00002aaaaac00000 8677376K rw-s- anon_hugepage (deleted)\n\n$ ipcs -m\n\n------ Shared Memory Segments --------\nkey        shmid      owner      perms      bytes      nattch     status\n0x03828f41 0          postgres   600        56         13\n<\/pre>\n<p>Another important thing, is that the PostgreSQL parameter huge_pages is set to on (default is try).<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$ cat postgresql.conf | grep huge_pages\nhuge_pages = on                         # on, off, or try\n<\/pre>\n<p>Change the XFS mount option to noatime,nodiratime<\/p>\n<p>The noatime mount option prevents access timestamps being updated when a file is read and the nodiratime mount option will stop directory inode access times being updated, which in turn leads to a increase performance by limiting the number of writes to the filesystem journal. Implementing the noatime,nodiratime can be done online and does not require a reboot.<\/p>\n<p>To setup the new XFS mount option, do the following steps.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$ sudo vi \/etc\/fstab\n...\n\/dev\/mapper\/vg01-alib \/app\/lib   xfs     defaults,noatime,nodiratime,nofail 0 0\n\n$ sudo systemctl daemon-reload\n\n$ sudo mount -o remount \/app\/lib\n\n$ mount | grep \/app\/lib\n\/dev\/mapper\/vg01-alib on \/app\/lib type xfs (rw,noatime,nodiratime,seclabel,attr2,inode64,noquota)\n<\/pre>\n<p>In case you want to learn more about about different tuning techniques on Red Hat, I would recommend to check out the following link.<\/p>\n<p><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux_for_real_time\/8\/html\/tuning_guide\/chap-general_system_tuning#File_system_determinism_tips\">https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux_for_real_time\/8\/html\/tuning_guide\/chap-general_system_tuning#File_system_determinism_tips<\/a><\/p>\n<p>Changing the Nice value of the temBoard systemd service<\/p>\n<p>The process priority or Niceness values range from -20 (most favorable to the process) to 19 (least favorable to the process). By configuring the Nice value of -19 you can give the temBoard service a very high priority on the system. I did this because the temBoard service is running on a dedicated host for that service only. In case you have other important services running on the same host, you might want to consider different Nice values or just go with the default.<\/p>\n<p>To implement the new Nice value, simply edit the service file, reload systemd, and stop\/start temBoard.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$ cat \/etc\/systemd\/system\/multi-user.target.wants\/temboard.service\n&#x5B;Unit]\nDescription=temBoard Web UI\nAfter=network.target\n\n&#x5B;Service]\nType=simple\nUser=temboard\nGroup=temboard\nExecStart=\/usr\/bin\/env SYSTEMD=1 temboard -c \/etc\/temboard\/temboard.conf\nNice=-19\n\n&#x5B;Install]\nWantedBy=multi-user.target\n\n$ sudo systemctl daemon-reload\n$ sudo systemctl stop temboard.service\n$ sudo systemctl start temboard.service\n<\/pre>\n<p>By running the top command, you can verify that the temboard worker has a nice value of -19.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$ top -c\n...\n  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND\n 4918 postgres  20   0 8907908  12924   4708 S  59.1  0.0   0:03.55 postgres: temboard temboard (16184) SELECT\n 4917 temboard   1 -19  475224 121596   2864 R  34.6  0.4   0:02.63 temboard: worker pool\n    9 root      20   0       0      0      0 S   0.3  0.0  21:44.92 &#x5B;rcu_sched]\n  470 root      20   0       0      0      0 S   0.3  0.0   3:06.95 &#x5B;xfsaild\/dm-0]\n\n<\/pre>\n<h3>temBoard server tuning<\/h3>\n<p>When it comes to the temBoard server tuning itself, there are not too many options to tune. The most important one is to keep your temBoard up2date. Check out regularly the github site for new versions.<\/p>\n<p><a href=\"https:\/\/github.com\/dalibo\/temboard\">https:\/\/github.com\/dalibo\/temboard<\/a><\/p>\n<p>New releases include not only new features and bug fixes. Every now and then new performance improvements are implemented as well. For example, with temBoard version 7.0, the performance for the home page (instance list) improved dramatically. Check out the change log list, to get an overview of the most important changes with each release.<\/p>\n<p>These are for example, the changes that came with 7.0.<\/p>\n<p><a href=\"https:\/\/temboard.readthedocs.io\/en\/v7\/CHANGELOG\/#70-2020-09-28\">https:\/\/temboard.readthedocs.io\/en\/v7\/CHANGELOG\/#70-2020-09-28<\/a><\/p>\n<p>[7.0] &#8211; 2020-09-28<\/p>\n<p>Added<\/p>\n<ul>\n<li>Statements plugin by @pgiraud and @dlax.<\/li>\n<li>Load PG* vars, by @bersace.<\/li>\n<\/ul>\n<p>Changed<\/p>\n<ul>\n<li><strong>Improved performance of the home page (instances list), by @pgiraud.<\/strong><\/li>\n<li>Activity filters are kept, by @pgiraud.<\/li>\n<li>Better support for history navigation in monitoring, by @pgiraud.<\/li>\n<li>Don&#8217;t highlight short idle_in_transaction queries, by @pgiraud.<\/li>\n<li>Added comment field for instance settings, by @pgiraud.<\/li>\n<li>Allow users to choose the refresh interval (whenever a date range picker is used), by @pgiraud.<\/li>\n<li>Agent: support for RHEL\/CentOS 6 has been dropped.<\/li>\n<li>Agent: support for RHEL\/CentOS 8 has been added.<\/li>\n<\/ul>\n<p>Fixed<\/p>\n<ul>\n<li>Agent scripts now use the Python interpreter of their installation, not the first found in env, by @bersace.<\/li>\n<\/ul>\n<p>The next very important tuning task are the adjustment of the purging policies, which can be configured in the \/etc\/temboard\/temboard.conf file. The purging of the monitoring data have no default value, so they are kept forever, and the history data in regards to the statements plugin are kept per default for 7 days.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;monitoring]\n# Set the amount of data to keep, expressed in days\npurge_after = 186\n\n&#x5B;statements]\n# Set the amount of data to keep, expressed in days\npurge_after = 14\n<\/pre>\n<p>Obviously, the smaller the amount of days you keep the data, the smaller the repository database is, and the faster it gets.<\/p>\n<p>Besides that, make sure that you don&#8217;t run temBoard in DEBUG mode by accident. That will have a quite significant impact as well.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;logging]\nmethod = file\ndestination = \/var\/log\/temboard\/temboard.log\nlevel = INFO\n# level = DEBUG\n<\/pre>\n<p>And last but not least, make sure that you tune your PostgreSQL temBoard repository database according to your needs. The most important settings are shared_buffer (default is 128MB) and work_mem (default is 4MB). The defaults are way too small in case you want to monitor e.g. over 100 PostgreSQL instances. I set shared_buffers = 8192MB, so that it just fits into my huge page pool, and work_mem = 32MB. With those settings it runs very smoothly.<\/p>\n<h3>temBoard agent tuning<\/h3>\n<p>The temBoard agent tuning is quite important as well. Besides keeping the version up2date, the most important part is the monitoring section in the agent temboard-agent.conf file.<\/p>\n<p>Per default, all metrics for all available PostgreSQL databases are collected in a scheduling interval of 60 seconds.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;monitoring]\n# dbnames = *\ndbnames = mydb\n# scheduler_interval = 60\nscheduler_interval = 300\n# probes = *\nprobes = locks,process,db_size,tblspc_size,sessions,blocks,xacts,replication,loadavg,filesystems_size,cpu,bgwriter,memory\n<\/pre>\n<p>If you collecting data for the development instance, you might not want a scheduling interval of 1 minute. Maybe 5 minutes is enough. The same applies to the databases. If you e.g. 5 databases in your instances, but you are interested only in database mydb, then you might want to change this as well. And last but not least, you might not want to collect data from all probes. Maybe collecting only locks,sessions and cpu is enough for you. Than you can change the probes parameter to probes = locks,sessions,cpu.<\/p>\n<h3>Conclusion<\/h3>\n<p>As mentioned beforehand, the temBoard monitoring tool is quite lightweight and fast per default, however, there are of course a few things that can be done to speed it up. If someone would ask me, what are the three most important changes is regards of temBoard tuning, I would say: Keep your temBoard version up2date, adjust the temBoard purging policies, and the agent scheduling interval.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A lot of things can be done, when it comes to performance tuning of the temBoard monitoring tool for PostgreSQL. The temBoard tool itself is very lightweight and already quite fast per default, however, if your environment grows you might need to tweak it a little bit. In this blog post I am going to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[10,5,6,7],"tags":[21,24],"class_list":["post-200","post","type-post","status-publish","format-standard","hentry","category-centos-os","category-os","category-postgresql","category-red-hat","tag-postgresql","tag-temboard","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PostgreSQL: temBoard Performance Tuning - ptdb - Platinum DB<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ptdb.ch\/?p=200\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL: temBoard Performance Tuning - ptdb - Platinum DB\" \/>\n<meta property=\"og:description\" content=\"A lot of things can be done, when it comes to performance tuning of the temBoard monitoring tool for PostgreSQL. The temBoard tool itself is very lightweight and already quite fast per default, however, if your environment grows you might need to tweak it a little bit. In this blog post I am going to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ptdb.ch\/?p=200\" \/>\n<meta property=\"og:site_name\" content=\"ptdb - Platinum DB\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-27T08:05:35+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ptdb.ch\/?p=200\",\"url\":\"https:\/\/ptdb.ch\/?p=200\",\"name\":\"PostgreSQL: temBoard Performance Tuning - ptdb - Platinum DB\",\"isPartOf\":{\"@id\":\"https:\/\/ptdb.ch\/#website\"},\"datePublished\":\"2021-01-27T08:05:35+00:00\",\"author\":{\"@id\":\"https:\/\/ptdb.ch\/#\/schema\/person\/0b7baf52d23e71d85e1c95442306090b\"},\"breadcrumb\":{\"@id\":\"https:\/\/ptdb.ch\/?p=200#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ptdb.ch\/?p=200\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ptdb.ch\/?p=200#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ptdb.ch\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL: temBoard Performance Tuning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ptdb.ch\/#website\",\"url\":\"https:\/\/ptdb.ch\/\",\"name\":\"ptdb - Platinum DB\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ptdb.ch\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/ptdb.ch\/#\/schema\/person\/0b7baf52d23e71d85e1c95442306090b\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ptdb.ch\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/ptdb.ch\"],\"url\":\"https:\/\/ptdb.ch\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PostgreSQL: temBoard Performance Tuning - ptdb - Platinum DB","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ptdb.ch\/?p=200","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL: temBoard Performance Tuning - ptdb - Platinum DB","og_description":"A lot of things can be done, when it comes to performance tuning of the temBoard monitoring tool for PostgreSQL. The temBoard tool itself is very lightweight and already quite fast per default, however, if your environment grows you might need to tweak it a little bit. In this blog post I am going to [&hellip;]","og_url":"https:\/\/ptdb.ch\/?p=200","og_site_name":"ptdb - Platinum DB","article_published_time":"2021-01-27T08:05:35+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ptdb.ch\/?p=200","url":"https:\/\/ptdb.ch\/?p=200","name":"PostgreSQL: temBoard Performance Tuning - ptdb - Platinum DB","isPartOf":{"@id":"https:\/\/ptdb.ch\/#website"},"datePublished":"2021-01-27T08:05:35+00:00","author":{"@id":"https:\/\/ptdb.ch\/#\/schema\/person\/0b7baf52d23e71d85e1c95442306090b"},"breadcrumb":{"@id":"https:\/\/ptdb.ch\/?p=200#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ptdb.ch\/?p=200"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ptdb.ch\/?p=200#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ptdb.ch\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL: temBoard Performance Tuning"}]},{"@type":"WebSite","@id":"https:\/\/ptdb.ch\/#website","url":"https:\/\/ptdb.ch\/","name":"ptdb - Platinum DB","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ptdb.ch\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ptdb.ch\/#\/schema\/person\/0b7baf52d23e71d85e1c95442306090b","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ptdb.ch\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1a3dffc48c5f6bae0b88a9f0b2a986d48d322673fbc2880c5abbfab96e45da8a?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/ptdb.ch"],"url":"https:\/\/ptdb.ch\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/posts\/200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ptdb.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=200"}],"version-history":[{"count":0,"href":"https:\/\/ptdb.ch\/index.php?rest_route=\/wp\/v2\/posts\/200\/revisions"}],"wp:attachment":[{"href":"https:\/\/ptdb.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ptdb.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ptdb.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}