{"id":38196,"date":"2019-10-31T22:22:13","date_gmt":"2019-10-31T19:22:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/odin-iz-metodov-polucheniya-profilya-rabochej-nagruzki-i-istorii-ozhidanij-v-postgresql\/"},"modified":"2019-10-31T22:22:13","modified_gmt":"2019-10-31T19:22:13","slug":"odin-iz-metodov-polucheniya-profilya-rabochej-nagruzki-i-istorii-ozhidanij-v-postgresql","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/odin-iz-metodov-polucheniya-profilya-rabochej-nagruzki-i-istorii-ozhidanij-v-postgresql","title":{"rendered":"Eine der Methoden zur Erfassung des Arbeitslastprofils und der Wartegeschichte in PostgreSQL","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Fortsetzung des Artikels &#171;<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467181\/\">Versuch, ein Analogon zu ASH f\u00fcr PostgreSQL zu erstellen <\/a><\/noindex>&#171;.<\/p>\n<p>Im Artikel wird an konkreten Abfragen und Beispielen gezeigt, welche n\u00fctzlichen Informationen durch die Historie der Ansicht pg_stat_activity gewonnen werden k\u00f6nnen.<\/p>\n<blockquote><p>Warnung.<br \/>\nAufgrund der Neuheit des Themas und des unvollendeten Testzeitraums kann der Artikel Fehler enthalten. Kritik und Anmerkungen sind jederzeit willkommen und werden erwartet.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Eingabedaten<\/h2>\n<p><\/p>\n<h3>Historie der Ansicht pg_stat_statements<\/h3>\n<p>\n<b class=\"spoiler_title\">pg_stat_history<\/b><\/p>\n<pre><code class=\"pgsql\">CREATE TABLE pg_stat_history ( \nid SERIAL, \nsnapshot_timestamp  timestamp ohne Zeitzone, \ndatabase_id integer,\ndbid oid,\nuserid oid,\nqueryid bigint,\nquery text,\ncalls bigint, \ntotal_time double precision, \nmin_time double precision, \nmax_time double precision, \nmean_time double precision,\nstddev_time double precision,\nrows bigint,\nshared_blks_hit bigint, \nshared_blks_read bigint, \nshared_blks_dirtied bigint, \nshared_blks_written bigint, \nlocal_blks_hit bigint, \nlocal_blks_read bigint,\nlocal_blks_dirtied bigint, \nlocal_blks_written bigint, \ntemp_blks_read bigint,\ntemp_blks_written bigint,\nblk_read_time double precision, \nblk_write_time double precision, \nbaseline_id integer );<\/code><\/pre>\n<p>\n Die Tabelle wird jede Stunde gef\u00fcllt, indem dblink auf die Ziel-Datenbank verwendet wird. Die interessanteste und n\u00fctzlichste Spalte in der Tabelle ist offensichtlich <b>queryid<\/b>.<\/p>\n<h3>Historie der Ansicht pg_stat_activity<\/h3>\n<p>\n<b class=\"spoiler_title\">archive_pg_stat_activity<\/b><\/p>\n<pre><code class=\"pgsql\">CREATE TABLE archive_pg_stat_activity\n(\n  timepoint timestamp ohne Zeitzone,\n  datid             oid, \n  datname           name,\n  pid               integer,\n  usesysid          oid,\n  usename           name,\n  application_name  text,\n  client_addr       inet,\n  client_hostname   text,\n  client_port       integer,\n  backend_start     timestamp ohne Zeitzone,\n  xact_start        timestamp ohne Zeitzone,\n  query_start       timestamp ohne Zeitzone,\n  state_change      timestamp ohne Zeitzone,\n  wait_event_type   text,                     \n  wait_event        text,                   \n  state             text,                  \n  backend_xid       xid,                 \n  backend_xmin      xid,                \n  query             text,               \n  backend_type      text,\n  queryid           bigint\n);<\/code><\/pre>\n<p>\nDie Tabelle stellt eine stundenweise partitionierte Tabelle history_pg_stat_activity dar (Mehr dazu hier \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467277\/\">pg_stat_statements + pg_stat_activity + log_query = pg_ash? <\/a><\/noindex> und hier \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467181\/\">Ein Versuch, ein Analogon von ASH f\u00fcr PostgreSQL zu erstellen.)<\/a><\/noindex><\/p>\n<h2>Ausgabe<\/h2>\n<p><\/p>\n<h3>CLUSTER CPU TIME (SYSTEM + CLIENTS )<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">WITH \n t AS\n (\n\tSELECT \t\t\n\t\t\tdate_trunc('second', timepoint)\n\tFROM \tactivity_hist.archive_pg_stat_activity aa\n\tWHERE \ttimepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND \n\t\t\t( aa.wait_event_type IS NULL  ) AND\n\t\t\taa.state = 'active'\n )\n SELECT count(*) \n INTO cpu_total\n FROM t ;<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre><code class=\"plaintext\">CLUSTER CPU TIME (SYSTEM + CLIENTS ) : 28:37:46<\/code><\/pre>\n<p><\/p>\n<h3>CLUSTER WAITINGS TIME<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">WITH \n t AS\n (\n\tSELECT \t\t\n\t\t\tdate_trunc('second', timepoint)\n\tFROM \tactivity_hist.archive_pg_stat_activity aa\n\tWHERE \ttimepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND \n\t\t\t( aa.wait_event_type IS NOT NULL  ) AND\n\t\t\taa.state = 'active'\n )\n SELECT count(*) \n INTO cpu_total\n FROM t ;<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre><code class=\"plaintext\">CLUSTER WAITINGS TIME : 30:12:49<\/code><\/pre>\n<p><\/p>\n<h3>Gesamte Werte von pg_stat_statements<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\"> --GESAMT pg_stat\n  W\u00c4HLE \n    SUM(calls) AS calls, SUM(total_time) AS total_time, SUM(rows) AS rows ,\n\tSUM(shared_blks_hit) AS shared_blks_hit, SUM(shared_blks_read) AS shared_blks_read ,\n\tSUM(shared_blks_dirtied) AS shared_blks_dirtied, SUM(shared_blks_written) AS shared_blks_written , \n    SUM(local_blks_hit) AS local_blks_hit , SUM(local_blks_read) AS local_blks_read , \n\tSUM(local_blks_dirtied) AS local_blks_dirtied , SUM(local_blks_written) AS local_blks_written,\n\tSUM(temp_blks_read) AS temp_blks_read, SUM(temp_blks_written) AS temp_blks_written , \n\tSUM(blk_read_time) AS blk_read_time , SUM(blk_write_time) AS blk_write_time\n  IN \n    pg_total_stat_history_rec\n  AUS \n    pg_stat_history\n  WO \n \tsnapshot_timestamp ZWISCHEN pg_stat_history_begin UND pg_stat_history_end UND \n\tqueryid IST NULL;<\/code><\/pre>\n<p><\/p>\n<h3>SQL DBTIME \u2014 Gesamtdauer der Anfrageausf\u00fchrung<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">dbtime_total = intervall '1 millisecond' * pg_total_stat_history_rec.total_time ;<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre><code class=\"plaintext\">SQL DBTIME : 136:49:36<\/code><\/pre>\n<p><\/p>\n<h3>SQL CPU TIME - CPU-Zeit, die f\u00fcr die Ausf\u00fchrung von Anfragen aufgewendet wird<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">MIT \n t ALS\n (\n\tW\u00c4HLE \t\t\n\t\t\tdate_trunc('second', timepoint)\n\tAUS \tactivity_hist.archive_pg_stat_activity aa\n\tWO \ttimepoint ZWISCHEN pg_stat_history_begin+(current_hour_diff * intervall '1 hour') UND pg_stat_history_end+(current_hour_diff * intervall '1 hour') UND \n\t\t\t( aa.wait_event_type IST NULL ) UND\n\t\t\tbackend_type = 'client backend' UND \n\t\t\taa.state = 'active'\n )\n W\u00c4HLE count(*) \n IN \n cpu_total\n AUS t ;<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre><code class=\"plaintext\">SQL CPU TIME : 27:40:15<\/code><\/pre>\n<p><\/p>\n<h3>SQL WAITINGS TIME \u2014 Gesamtdauer der Wartezeiten f\u00fcr Abfragen<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">MIT \n t ALS\n (\n\tW\u00c4HLE \t\t\n\t\t\tdate_trunc('second', timepoint)\n\tAUS \tactivity_hist.archive_pg_stat_activity aa\n\tWO \ttimepoint ZWISCHEN pg_stat_history_begin+(current_hour_diff * intervall '1 hour') UND pg_stat_history_end+(current_hour_diff * intervall '1 hour') UND \n\t\t\t( aa.wait_event_type IST NICHT NULL ) UND\n\t\t\taa.state = 'active' UND \n\t\tbackend_type = 'client backend'\n )\n W\u00c4HLE count(*) \n IN \n waiting_total\n AUS t ;<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre><code class=\"plaintext\">SQL WAITINGS TIME : 30:04:09<\/code><\/pre>\n<p>\nDie folgenden Abfragen sind trivial und werden zum Platzsparen in den Implementierungsdetails ausgelassen:<\/p>\n<p><b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre><code class=\"plaintext\">| SQL IOTIME : 19:44:50\n| SQL READ TIME : 19:44:32\n| SQL WRITE TIME : 00:00:17\n|\n| SQL ANFRAGEN : 12188248\n-------------------------------------------------------------\n| SQL GETEILTE BLOCKLESUNGEN : 7997039120\n| SQL GETEILTE BLOCKTREFFER : 8868286092\n| SQL GETEILTE BLOCKTREFFER\/LESEN % : 110.89\n| SQL GETEILTE BLOCKVERDRECKTE : 419945\n| SQL GETEILTE BLOCKEINGESCHRIEBEN : 19857\n|\n| SQL TEMPOR\u00c4RE BLOCKLESUNGEN : 7836169\n| SQL TEMPOR\u00c4RE BLOCKEINGESCHRIEBEN : 10683938\n<\/code><\/pre>\n<p>\nKommen wir zum interessanteren Abschnitt<\/p>\n<h2>WARTUNGSTATISTIKEN<\/h2>\n<p><\/p>\n<h3>TOP 10 WARTUNGEN NACH GESAMTER WARTEDAUER F\u00dcR KLIENTPROZESSE<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">W\u00c4HLE \n  wait_event_type, wait_event ,\n  get_system_waiting_duration( wait_event_type , wait_event ,pg_stat_history_begin+(current_hour_diff * intervall '1 hour') ,pg_stat_history_end+(current_hour_diff * intervall '1 hour') ) als dauer \nAUS\n  activity_hist.archive_pg_stat_activity aa\nWO \n  timepoint ZWISCHEN pg_stat_history_begin+(current_hour_diff * intervall '1 hour') UND pg_stat_history_end+(current_hour_diff * intervall '1 hour') UND backend_type != 'client backend' UND wait_event_type IST NICHT NULL \nGRUPPIERE NACH \n  wait_event_type, wait_event\nBESTELLE NACH 3 ABSTEIGEND\nLIMIT 10<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre>+------------------------------------------------------------------------------------\n| TOP 10 WARTEZEITEN NACH GESAMTER WARTEZEIT F\u00dcR SYSTEMPROZESSE\n+-----+------------------------------+--------------------+--------------------\n|    #|               wait_event_type|          wait_event|            dauer\n+-----+------------------------------+--------------------+--------------------\n|    1|                      Aktivit\u00e4t| LogicalLauncherMain|            10:43:28\n|    2|                      Aktivit\u00e4t|      AutoVacuumMain|            10:42:49\n|    3|                      Aktivit\u00e4t|       WalWriterMain|            10:28:53\n|    4|                      Aktivit\u00e4t|    CheckpointerMain|            10:23:50\n|    5|                      Aktivit\u00e4t|        BgWriterMain|            09:11:59\n|    6|                      Aktivit\u00e4t|   BgWriterHibernate|            01:37:46\n|    7|                            IO|        BufFileWrite|            00:02:35\n|    8|                        LWLock|      buffer_mapping|            00:01:54\n|    9|                            IO|        DataFileRead|            00:01:23\n|   10|                            IO|            WALWrite|            00:00:59\n+-----+------------------------------+--------------------+--------------------\n<\/pre>\n<p><\/p>\n<h3>TOP 10 WARTUNGEN NACH GESAMTER WARTEDAUER F\u00dcR KLIENTPROZESSE<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">SELECT \n  wait_event_type , wait_event ,\n  get_clients_waiting_duration( wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as dauer\nFROM \n  activity_hist.archive_pg_stat_activity aa\nWHERE \n  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL \nGROUP BY wait_event_type, wait_event\nORDER BY 3 DESC\nLIMIT 10<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre>+-----+------------------------------+--------------------+--------------------+----------\n|    #|               wait_event_type|          wait_event|            dauer|  % dbtime\n+-----+------------------------------+--------------------+--------------------+----------\n|    1|                          Lock|       transactionid|            08:16:47|      6.05\n|    2|                            IO|        DataFileRead|            06:13:41|      4.55\n|    3|                       Timeout|             PgSleep|            02:53:21|      2.11\n|    4|                        LWLock|      buffer_mapping|            00:40:42|       0.5\n|    5|                        LWLock|           buffer_io|            00:17:17|      0.21\n|    6|                            IO|        BufFileWrite|            00:01:34|      0.02\n|    7|                          Lock|               tuple|            00:01:32|      0.02\n|    8|                        Client|          ClientRead|            00:01:19|      0.02\n|    9|                            IO|         BufFileRead|            00:00:37|      0.01\n|   10|                        LWLock|      buffer_content|            00:00:08|         0\n+-----+------------------------------+--------------------+--------------------+----------\n<\/pre>\n<p><\/p>\n<h3>WARTETYPEN NACH GESAMTER WARTEZEIT F\u00dcR SYSTEMPROZESSE<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">SELECT \n  wait_event_type ,\n  get_system_waiting_type_duration( wait_event_type , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as dauer\nFROM\n  activity_hist.archive_pg_stat_activity aa\nWHERE \n  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND  backend_type != 'client backend' AND wait_event_type IS NOT NULL \nGROUP BY wait_event_type\nORDER BY 2 DESC<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre>+-----+------------------------------+--------------------\n|    #|               wait_event_type|            duration\n+-----+------------------------------+--------------------\n|    1|                      Aktivit\u00e4t|            53:08:45\n|    2|                            IO|            00:06:24\n|    3|                        LWLock|            00:03:02\n+-----+------------------------------+--------------------\n<\/pre>\n<p><\/p>\n<h3> WARTUNGSTYPEN NACH GESAMT-WARTEDAUER F\u00dcR CLIENTPROZESSE<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">SELECT \n  wait_event_type ,\n  get_clients_waiting_type_duration( wait_event_type , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration\nFROM\n  activity_hist.archive_pg_stat_activity aa\nWHERE \n  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL \nGROUP BY wait_event_type\nORDER BY 2 DESC<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre>+-----+------------------------------+--------------------+--------------------\n|    #|               wait_event_type|            duration|            % dbtime\n+-----+------------------------------+--------------------+--------------------\n|    1|                          Lock|            08:18:19|                6.07\n|    2|                            IO|            06:16:01|                4.58\n|    3|                       Timeout|            02:53:21|                2.11\n|    4|                        LWLock|            00:58:12|                0.71\n|    5|                        Client|            00:01:19|                0.02\n|    6|                           IPC|            00:00:04|                   0\n+-----+------------------------------+--------------------+--------------------\n<\/pre>\n<p>\nDauer der Wartezeiten f\u00fcr Systemprozesse und einzelne Anfragen.<\/p>\n<h3>WARTUNGEN F\u00dcR SYSTEMPROZESSE<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">SELECT \n  backend_type , datname , wait_event_type , wait_event , get_backend_type_waiting_duration( backend_type , wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration \nFROM \n  activity_hist.archive_pg_stat_activity aa\nWHERE \n  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL \nGROUP BY backend_type , datname , wait_event_type , wait_event\nORDER BY 5 DESC<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre>+-----+-----------------------------+----------+--------------------+----------------------+--------------------\n|    #|                 backend_typ|    dbname|     wait_event_typ|            wait_event|            duration\n+-----+-----------------------------+----------+--------------------+----------------------+--------------------\n|    1| logische Replikationsstarter|          |            Aktivit\u00e4t|   LogicalLauncherMain|            10:43:28\n|    2|          Autovacuum-Launcher|          |            Aktivit\u00e4t|        AutoVacuumMain|            10:42:49\n|    3|                    walwriter|          |            Aktivit\u00e4t|         WalWriterMain|            10:28:53\n|    4|                 Pr\u00fcfpunkt|          |            Aktivit\u00e4t|      CheckpointerMain|            10:23:50\n|    5|            Hintergrundschreiber|          |            Aktivit\u00e4t|          BgWriterMain|            09:11:59\n|    6|            Hintergrundschreiber|          |            Aktivit\u00e4t|     BgWriterHibernate|            01:37:46\n|    7|              paralleler Arbeiter|      tdb1|                  IO|          BufFileWrite|            00:02:35\n|    8|              paralleler Arbeiter|      tdb1|              LWLock|        buffer_mapping|            00:01:41\n|    9|              paralleler Arbeiter|      tdb1|                  IO|          DataFileRead|            00:01:22\n|   10|              paralleler Arbeiter|      tdb1|                  IO|           BufFileRead|            00:00:59\n|   11|                    walwriter|          |                  IO|              WALWrite|            00:00:57\n|   12|              paralleler Arbeiter|      tdb1|              LWLock|             buffer_io|            00:00:47\n|   13|            Autovacuum-Arbeiter|      tdb1|              LWLock|        buffer_mapping|            00:00:13\n|   14|            Hintergrundschreiber|          |                  IO|         DataFileWrite|            00:00:12\n|   15|                 Pr\u00fcfpunkt|          |                  IO|         DataFileWrite|            00:00:11\n|   16|                    walwriter|          |              LWLock|          WALWriteLock|            00:00:09\n|   17|                 Pr\u00fcfpunkt|          |              LWLock|          WALWriteLock|            00:00:06\n|   18|            Hintergrundschreiber|          |              LWLock|          WALWriteLock|            00:00:06\n|   19|                    walwriter|          |                  IO|          WALInitWrite|            00:00:02\n|   20|            Autovacuum-Arbeiter|      tdb1|              LWLock|          WALWriteLock|            00:00:02\n|   21|                    walwriter|          |                  IO|           WALInitSync|            00:00:02\n|   22|            Autovacuum-Arbeiter|      tdb1|                  IO|          DataFileRead|            00:00:01\n|   23|                 Pr\u00fcfpunkt|          |                  IO| ControlFileSyncUpdate|            00:00:01\n|   24|            Hintergrundschreiber|          |                  IO|              WALWrite|            00:00:01\n|   25|            Hintergrundschreiber|          |                  IO|         DataFileFlush|            00:00:01\n|   26|                 Pr\u00fcfpunkt|          |                  IO|         SLRUFlushSync|            00:00:01\n|   27|            Autovacuum-Arbeiter|      tdb1|                  IO|              WALWrite|            00:00:01\n|   28|                 Pr\u00fcfpunkt|          |                  IO|          DataFileSync|            00:00:01\n+-----+-----------------------------+----------+--------------------+----------------------+--------------------<\/pre>\n<p><\/p>\n<h3>WARTEN AUF SQL \u2014 Wartezeiten f\u00fcr bestimmte Anfragen nach queryid<\/h3>\n<p>\n<b class=\"spoiler_title\">Abfrage<\/b><\/p>\n<pre><code class=\"pgsql\">W\u00c4HLEN \nqueryid, datname, wait_event_type, wait_event, get_query_waiting_duration(queryid, wait_event_type, wait_event, pg_stat_history_begin + (current_hour_diff * interval '1 hour'), pg_stat_history_end + (current_hour_diff * interval '1 hour')) AS dauer \nVON \nactivity_hist.archive_pg_stat_activity aa \nWO \nzeitpunkt ZWISCHEN pg_stat_history_begin + (current_hour_diff * interval '1 hour') UND pg_stat_history_end + (current_hour_diff * interval '1 hour') UND backend_type = 'client backend' UND wait_event_type IST NICHT NULL UND queryid IST NICHT NULL \nGRUPPIEREN NACH queryid, datname, wait_event_type, wait_event \nBESTELLEN NACH 1, 5 DESC <\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Beispiel<\/b><\/p>\n<pre>+-----+-------------------------+----------+--------------------+--------------------+--------------------+--------------------\n|    #|                  queryid|    dbname|     wait_event_type|          wait_event|            waitings|               total\n|     |                         |          |                    |                    |            duration|            duration\n+-----+-------------------------+----------+--------------------+--------------------+--------------------+--------------------\n|    1|     -8247416849404883188|      tdb1|              Client|          ClientRead|            00:00:02|\n|    2|     -6572922443698419129|      tdb1|              Client|          ClientRead|            00:00:05|\n|    3|     -6572922443698419129|      tdb1|                  IO|        DataFileRead|            00:00:01|\n|    4|     -5917408132400665328|      tdb1|              Client|          ClientRead|            00:00:04|\n|    5|     -4091009262735781873|      tdb1|              Client|          ClientRead|            00:00:03|\n|    6|     -1473395109729441239|      tdb1|              Client|          ClientRead|            00:00:01|\n|    7|        28942442626229688|      tdb1|                  IO|        BufFileWrite|            00:01:34|            00:46:06\n|    8|        28942442626229688|      tdb1|              LWLock|      buffer_mapping|            00:01:05|            00:46:06\n|    9|        28942442626229688|      tdb1|                  IO|        DataFileRead|            00:00:44|            00:46:06\n|   10|        28942442626229688|      tdb1|                  IO|         BufFileRead|            00:00:37|            00:46:06\n|   11|        28942442626229688|      tdb1|              LWLock|           buffer_io|            00:00:35|            00:46:06\n|   12|        28942442626229688|      tdb1|              Client|          ClientRead|            00:00:05|            00:46:06\n|   13|        28942442626229688|      tdb1|                 IPC| MessageQueueReceive|            00:00:03|            00:46:06\n|   14|        28942442626229688|      tdb1|                 IPC|    BgWorkerShutdown|            00:00:01|            00:46:06\n|   15|       389015618226997618|      tdb1|                Lock|       transactionid|            03:55:09|            04:14:15\n|   16|       389015618226997618|      tdb1|                  IO|        DataFileRead|            03:23:09|            04:14:15\n|   17|       389015618226997618|      tdb1|              LWLock|      buffer_mapping|            00:12:09|            04:14:15\n|   18|       389015618226997618|      tdb1|              LWLock|           buffer_io|            00:10:18|            04:14:15\n|   19|       389015618226997618|      tdb1|                Lock|               tuple|            00:00:35|            04:14:15\n|   20|       389015618226997618|      tdb1|              LWLock|        WALWriteLock|            00:00:02|            04:14:15\n|   21|       389015618226997618|      tdb1|                  IO|       DataFileWrite|            00:00:01|            04:14:15\n|   22|       389015618226997618|      tdb1|              LWLock|        SyncScanLock|            00:00:01|            04:14:15\n|   23|       389015618226997618|      tdb1|              Client|          ClientRead|            00:00:01|            04:14:15\n|   24|       734234407411547467|      tdb1|              Client|          ClientRead|            00:00:11|\n|   25|       734234407411547467|      tdb1|              LWLock|      buffer_mapping|            00:00:05|\n|   26|       734234407411547467|      tdb1|                  IO|        DataFileRead|            00:00:02|\n|   27|      1237430309438971376|      tdb1|              LWLock|      buffer_mapping|            00:02:18|            02:45:40\n|   28|      1237430309438971376|      tdb1|                  IO|        DataFileRead|            00:00:27|            02:45:40\n|   29|      1237430309438971376|      tdb1|              Client|          ClientRead|            00:00:02|            02:45:40\n|   30|      2404820632950544954|      tdb1|              Client|          ClientRead|            00:00:01|\n|   31|      2515308626622579467|      tdb1|              Client|          ClientRead|            00:00:02|\n|   32|      4710212362688288619|      tdb1|              LWLock|      buffer_mapping|            00:03:08|            02:18:21\n|   33|      4710212362688288619|      tdb1|                  IO|        DataFileRead|            00:00:22|            02:18:21\n|   34|      4710212362688288619|      tdb1|              Client|          ClientRead|            00:00:06|            02:18:21\n|   35|      4710212362688288619|      tdb1|              LWLock|           buffer_io|            00:00:02|            02:18:21\n|   36|      9150846928388977274|      tdb1|                  IO|        DataFileRead|            00:01:19|\n|   37|      9150846928388977274|      tdb1|              LWLock|      buffer_mapping|            00:00:34|\n|   38|      9150846928388977274|      tdb1|              Client|          ClientRead|            00:00:10|\n|   39|      9150846928388977274|      tdb1|              LWLock|           buffer_io|            00:00:01|\n+-----+-------------------------+----------+--------------------+--------------------+--------------------+--------------------<\/pre>\n<p><\/p>\n<h3>KUNDEN-SQL-STATISTIKEN \u2014 TOP-Anfragen<\/h3>\n<p>\nDie Anfragen zur Erlangung sind, wieder einmal, trivial und werden aus Platzgr\u00fcnden nicht aufgef\u00fchrt. <\/p>\n<p><b class=\"spoiler_title\">Beispiele<\/b><\/p>\n<pre>+------------------------------------------------------------------------------------\n| CLIENT SQL nach verstrichener Zeit sortiert\n+--------------------+----------+----------+----------+----------+----------+--------------------\n|        verstrichene Zeit|     Aufrufe|  % dbzeit|     % CPU|      % IO|    dbname|             queryid\n+--------------------+----------+----------+----------+----------+----------+--------------------\n|            04:14:15|        19|       3.1|     10.83|     11.52|      tdb1|  389015618226997618\n|            02:45:40|       746|      2.02|      4.23|      0.08|      tdb1| 1237430309438971376\n|            02:18:21|       749|      1.69|      3.39|       0.1|      tdb1| 4710212362688288619\n|            00:46:06|       375|      0.56|      0.94|      0.41|      tdb1|   28942442626229688\n+--------------------+----------+----------+----------+----------+----------+--------------------\n| CLIENT SQL nach CPU-Zeit sortiert\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|            cpu Zeit|     Aufrufe|  % dbzeit|gesamtzeit|     % CPU|      % IO|    dbname|             queryid\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|            02:59:49|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618\n|            01:10:12|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376\n|            00:56:15|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619\n|            00:15:35|       375|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n| CLIENT SQL nach Benutzereingabe\/I\/O Wartezeit sortiert\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|        io_wartezeit|     Aufrufe|  % dbzeit|gesamtzeit|     % CPU|      % IO|    dbname|             queryid\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|            03:23:10|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618\n|            00:02:54|       375|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688\n|            00:00:27|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376\n|            00:00:22|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n| CLIENT SQL nach Lesezugriffen auf gemeinsam genutzte Puffer sortiert\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|       pufferzugriffe|     Aufrufe|  % dbzeit|gesamtzeit|     % CPU|      % IO|    dbname|             queryid\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|          1056388566|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618\n|            11709251|       375|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688\n|             3439004|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376\n|             3373330|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n| CLIENT SQL nach Lesezugriffszeiten sortiert\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|           lesezeit|     Aufrufe|  % dbzeit|gesamtzeit|     % CPU|      % IO|    dbname|             queryid\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|            02:16:30|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618\n|            00:04:50|       375|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688\n|            00:01:10|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619\n|            00:00:57|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n| CLIENT SQL nach Ausf\u00fchrungen sortiert\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|               aufrufe|      zeilen|  % dbzeit|gesamtzeit|     % CPU|      % IO|    dbname|             queryid\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------\n|                 749|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619\n|                 746|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376\n|                 375|         0|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688\n|                  19|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618\n+--------------------+----------+----------+----------+----------+----------+----------+--------------------<\/pre>\n<p><\/p>\n<h2>Fazit<\/h2>\n<p>\nDurch die Verwendung der bereitgestellten Anfragen und der erhaltenen Berichterstattung kann ein umfassenderes Bild f\u00fcr die Analyse und L\u00f6sung von Leistungsdegradationsproblemen f\u00fcr einzelne Anfragen und den gesamten Cluster insgesamt gewonnen werden.<\/p>\n<h2>Entwicklung<\/h2>\n<p>\nDie zuk\u00fcnftigen Entwicklungspl\u00e4ne sind wie folgt:<\/p>\n<ul>\n<li>Die Berichterstattung um die Geschichte der Sperrungen erweitern. Die Anfragen werden getestet und in naher Zukunft bereitgestellt.<\/li>\n<li>Die Erweiterung TimescaleDB zur Speicherung der Historie von pg_stat_activity und pg_locks verwenden.<\/li>\n<li>Ein Paketl\u00f6sungs-Paket auf github vorbereiten, um eine massenhafte Bereitstellung auf Produktionsdatenbanken zu erm\u00f6glichen.<\/li>\n<\/ul>\n<p>\nFortsetzung folgt\u2026<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467575\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 &#171;\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 ASH \u0434\u043b\u044f PostgreSQL &#171;. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u2014 \u043a\u0430\u043a\u0443\u044e \u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f pg_stat_activity. \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043d\u043e\u0432\u0438\u0437\u043d\u043e\u0439 \u0442\u0435\u043c\u044b \u0438 \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438. \u041a\u0440\u0438\u0442\u0438\u043a\u0430 \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432\u0441\u044f\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f \u0438 \u043e\u0436\u0438\u0434\u0430\u044e\u0442\u0441\u044f. \u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38196","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 &quot;\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 ASH \u0434\u043b\u044f PostgreSQL &quot;. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0438.\" \/>\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\/de\/blog\/administrirovanie\/odin-iz-metodov-polucheniya-profilya-rabochej-nagruzki-i-istorii-ozhidanij-v-postgresql\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\u041e\u0434\u0438\u043d \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439 \u0432 PostgreSQL | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 &quot;\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 ASH \u0434\u043b\u044f PostgreSQL &quot;. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/odin-iz-metodov-polucheniya-profilya-rabochej-nagruzki-i-istorii-ozhidanij-v-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-31T19:22:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:22:13+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\udd47Eine Methode zur Gewinnung eines Workload-Profils und der Warteschlangengeschichte in PostgreSQL | ProHoster","description":"Fortsetzung des Artikels \"Versuch, ein \u00c4quivalent zu ASH f\u00fcr PostgreSQL zu erstellen\". Der Artikel wird untersucht und zeigt dies an spezifischen Anfragen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/odin-iz-metodov-polucheniya-profilya-rabochej-nagruzki-i-istorii-ozhidanij-v-postgresql","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\u041e\u0434\u0438\u043d \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439 \u0432 PostgreSQL | ProHoster","og:description":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 &quot;\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 ASH \u0434\u043b\u044f PostgreSQL &quot;. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0438.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/odin-iz-metodov-polucheniya-profilya-rabochej-nagruzki-i-istorii-ozhidanij-v-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-31T19:22:13+00:00","article:modified_time":"2019-10-31T19:22:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38196","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:52:50","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:13:23","updated":"2026-01-23 20:52:50","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/38196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=38196"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/38196\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=38196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=38196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=38196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}