{"id":75678,"date":"2020-03-27T19:42:27","date_gmt":"2020-03-27T17:42:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/o-chem-molchit-explain-i-kak-ego-razgovorit"},"modified":"2020-03-27T19:42:27","modified_gmt":"2020-03-27T17:42:27","slug":"o-chem-molchit-explain-i-kak-ego-razgovorit","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/o-chem-molchit-explain-i-kak-ego-razgovorit","title":{"rendered":"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Eine klassische Frage, die Entwickler an ihren DBA oder Gesch\u00e4ftsinhaber \u2013 an einen PostgreSQL-Berater \u2013 stellen, lautet fast immer gleich: <i>\u201eWarum dauern die Abfragen auf der Datenbank so lange?\u201c<\/i><\/p>\n<p>Eine traditionelle Reihe von Gr\u00fcnden:<\/p>\n<ul>\n<li><b>ineffizienter Algorithmus<\/b><br \/>\nwenn Sie beschlossen haben, mehrere CTEs mit mehreren Zehntausend Datens\u00e4tzen zu verkn\u00fcpfen<\/li>\n<li><b>veraltete Statistiken.<\/b><br \/>\nwenn die tats\u00e4chliche Verteilung der Daten in der Tabelle bereits stark von der zuletzt gesammelten ANALYZE abweicht<\/li>\n<li><b>\"Engpass\" bei den Ressourcen<\/b><br \/>\nund es an den zugewiesenen CPU-Ressourcen mangelt, Gigabytes an Speicher st\u00e4ndig voll ausgelastet sind oder die Festplatte den vielen \u201eW\u00fcnschen\u201c der DB nicht gerecht wird<\/li>\n<li><b>Sperrung<\/b> wegen konkurrierender Prozesse<\/li>\n<\/ul>\n<p>\nUnd wenn Sperren schwer zu erfassen und zu analysieren sind, dann gen\u00fcgt uns f\u00fcr alles andere <b>der Abfrageplan<\/b>, den man mit Hilfe von <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/using-explain\">dem EXPLAIN-Befehl erhalten kann<\/a><\/noindex> (<i>es ist nat\u00fcrlich besser, sofort EXPLAIN (ANALYZE, BUFFERS) ...<\/i>) oder <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/auto-explain\">dem Modul auto_explain<\/a><\/noindex>.<\/p>\n<p>Aber, wie in der betreffenden Dokumentation erw\u00e4hnt, <\/p>\n<blockquote><p>\u201eDas Verst\u00e4ndnis des Plans ist eine Kunst, und um diese zu meistern, ben\u00f6tigt man eine gewisse Erfahrung ...\u201c<\/p><\/blockquote>\n<p> Aber man kann auch ohne diese auskommen, wenn man ein geeignetes Werkzeug verwendet!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nWie sieht ein Anfrageplan normalerweise aus? So etwa:<\/p>\n<pre><code class=\"plaintext\">Index-Scan mit pg_class_relname_nsp_index auf pg_class (tats\u00e4chliche Zeit=0.049..0.050 Zeilen=1 Schleifen=1)\n  Index-Bedingung: (relname = $1)\n  Filter: (oid = $0)\n  Puffer: gemeinsamer Treffer=4\n  InitPlan 1 (gibt $0,$1 zur\u00fcck)\n    -&gt;  Limit (tats\u00e4chliche Zeit=0.019..0.020 Zeilen=1 Schleifen=1)\n          Puffer: gemeinsamer Treffer=1\n          -&gt;  Seq Scan auf pg_class pg_class_1 (tats\u00e4chliche Zeit=0.015..0.015 Zeilen=1 Schleifen=1)\n                Filter: (relkind = 'r'::&quot;char&quot;)\n                Entfernte Zeilen durch Filter: 5\n                Puffer: gemeinsamer Treffer=1<\/code><\/pre>\n<p>\noder so:<\/p>\n<pre><code class=\"plaintext\">&quot;Append  (Kosten=868.60..878.95 Zeilen=2 Breite=233) (tats\u00e4chliche Zeit=0.024..0.144 Zeilen=2 Schleifen=1)&quot;\n&quot;  Puffer: gemeinsamer Treffer=3&quot;\n&quot;  CTE cl&quot;\n&quot;    -&gt;  Seq Scan auf pg_class  (Kosten=0.00..868.60 Zeilen=9972 Breite=537) (tats\u00e4chliche Zeit=0.016..0.042 Zeilen=101 Schleifen=1)&quot;\n&quot;          Puffer: gemeinsamer Treffer=3&quot;\n&quot;  -&gt;  Limit  (Kosten=0.00..0.10 Zeilen=1 Breite=233) (tats\u00e4chliche Zeit=0.023..0.024 Zeilen=1 Schleifen=1)&quot;\n&quot;        Puffer: gemeinsamer Treffer=1&quot;\n&quot;        -&gt;  CTE Scan auf cl  (Kosten=0.00..997.20 Zeilen=9972 Breite=233) (tats\u00e4chliche Zeit=0.021..0.021 Zeilen=1 Schleifen=1)&quot;\n&quot;              Puffer: gemeinsamer Treffer=1&quot;\n&quot;  -&gt;  Limit  (Kosten=10.00..10.10 Zeilen=1 Breite=233) (tats\u00e4chliche Zeit=0.117..0.118 Zeilen=1 Schleifen=1)&quot;\n&quot;        Puffer: gemeinsamer Treffer=2&quot;\n&quot;        -&gt;  CTE Scan auf cl cl_1  (Kosten=0.00..997.20 Zeilen=9972 Breite=233) (tats\u00e4chliche Zeit=0.001..0.104 Zeilen=101 Schleifen=1)&quot;\n&quot;              Puffer: gemeinsamer Treffer=2&quot;\n&quot;Planungszeit: 0.634 ms&quot;\n&quot;Ausf\u00fchrungszeit: 0.248 ms&quot;<\/code><\/pre>\n<p>\nAber den Plan als Text \u00bbvon der Liste\u00ab zu lesen, ist sehr schwierig und un\u00fcbersichtlich:<\/p>\n<ul>\n<li>im Knoten wird ausgegeben <b>die Summe der Ressourcen des Teilbaums<\/b><br \/>\nDas bedeutet, um zu verstehen, wie viel Zeit f\u00fcr die Ausf\u00fchrung eines bestimmten Knotens aufgewendet wurde oder wie genau dieses Lesen der Daten aus der Tabelle von der Festplatte abgerufen wurde \u2013 muss man irgendwie das Eine vom Anderen abziehen.<\/li>\n<li>Die Knotenzeit ist erforderlich. <b>Multiplizieren mit loops.<\/b><br \/>\nJa, Subtraktion ist noch nicht die komplizierteste Operation, die man \u201eim Kopf\u201c durchf\u00fchren muss \u2013 schlie\u00dflich wird die Ausf\u00fchrungszeit als Durchschnitt f\u00fcr einen einzelnen Knoten angegeben, und es k\u00f6nnen Hunderte von ihnen vorhanden sein.<\/li>\n<li>Nun, all das zusammen erschwert die Antwort auf die Hauptfrage \u2013 also, wer ist <b>das \u201eschw\u00e4chste Glied\u201c?<\/b>?<\/li>\n<\/ul>\n<p>\nAls wir versuchten, all dies mehreren Hundert unserer Entwickler zu erkl\u00e4ren, stellten wir fest, dass das von au\u00dfen etwa so aussieht:<\/p>\n<p><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/abb07e902639b5ec245851aa4a0edb58.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAh, das hei\u00dft, wir brauchen\u2026<\/p>\n<h2>Ein Tool<\/h2>\n<p>\nIn diesem haben wir versucht, alle Schl\u00fcsselmechaniken zu sammeln, die helfen, anhand des Plans und der Anfrage zu verstehen, \u201ewer schuld ist und was zu tun ist\u201c. Und au\u00dferdem wollten wir einen Teil unseres Wissens mit der Gemeinschaft teilen.<br \/>\nTreffen Sie und nutzen Sie \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/explain.tensor.ru\/\">explain.tensor.ru<\/a><\/noindex> <\/p>\n<h3>Anschaulichkeit der Pl\u00e4ne<\/h3>\n<p>\nIst es leicht, den Plan zu verstehen, wenn er so aussieht?<\/p>\n<pre><code class=\"plaintext\">Seq Scan on pg_class (tats\u00e4chliche Zeit=0.009..1.304 Zeilen=6609 Schleifen=1)\n  Buffer: shared hit=263\nPlanungszeit: 0,108 ms\nAusf\u00fchrungszeit: 1,800 ms\n<\/code><\/pre>\n<p>\nNicht wirklich.<\/p>\n<p>Aber so, <b>in verk\u00fcrzter Form<\/b>, wenn die Schl\u00fcsselindikatoren getrennt sind \u2013 ist es bereits viel klarer:<\/p>\n<p><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/18404ce800de847f1934ac2c7fef10be.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAber wenn der Plan komplexer ist, kommt Hilfe von <b>Kreisdiagramm der Zeitverteilung<\/b> nach Knoten:<\/p>\n<p><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/ca9fdd07278801e4f3ad15e997efc1a0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00fcr die kompliziertesten Varianten steht uns auch <b>die Ausf\u00fchrungsdiagramm<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/c03f358858206d7ccae20fd8142baa8c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs gibt tats\u00e4chlich Nicht-Trivial-F\u00e4lle, in denen ein Plan mehr als eine tats\u00e4chliche Wurzel haben kann:<\/p>\n<p><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/ea4f3f498737e9cc3f8f40c16a5bd1d7.png\" style=\"display:block;margin: 0 auto;\" \/><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/267273e8491d6b4403442672612c33ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Strukturelle Hinweise<\/h3>\n<p>\nWenn die gesamte Struktur des Plans und dessen Schwachstellen bereits aufgegliedert und sichtbar sind, warum dann nicht dem Entwickler markieren und \u00abin verst\u00e4ndlicher Sprache\u00bb erkl\u00e4ren?<\/p>\n<p><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/0e7157a09f7f5707e769cc1d6a8f3af8.png\" style=\"display:block;margin: 0 auto;\" \/>Solcher Empfehlungsvorlagen haben wir bereits einige Dutzend gesammelt.<\/p>\n<h3>Zeilenprofilierer der Anfrage<\/h3>\n<p>\nWenn wir nun den analysierten Plan mit der urspr\u00fcnglichen Anfrage kombinieren, k\u00f6nnen wir sehen, wie viel Zeit jeder einzelne Operator in Anspruch genommen hat \u2014 etwa so:<\/p>\n<p><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/0766d331798d529363d10006ace211f3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 oder sogar so:<\/p>\n<p><img decoding=\"async\" alt=\"Wovon EXPLAIN schweigt und wie man es zum Sprechen bringt\" src=\"\/wp-content\/uploads\/2020\/03\/4efd23d84792c5a7f54b40e86ff17353.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Parameterersetzung in der Anfrage<\/h3>\n<p>\nWenn Sie nicht nur die Anfrage, sondern auch deren Parameter aus der DETAIL-Zeile des Logs an den Plan angeh\u00e4ngt haben, k\u00f6nnen Sie ihn in einer der Varianten zus\u00e4tzlich kopieren:<\/p>\n<ul>\n<li>mit den Werten in der Anfrage ersetzt<br \/>\nzum unmittelbaren Ausf\u00fchren auf Ihrer Datenbank und zur weiteren Profilierung<\/p>\n<pre><code class=\"sql\">SELECT 'const', 'param'::text;<\/code><\/pre>\n<\/li>\n<li>mit den Werten \u00fcber PREPARE\/EXECUTE ersetzt<br \/>\nf\u00fcr die Simulation der Arbeitsweise des Planers, wenn der parametrische Teil ignoriert werden kann \u2013 zum Beispiel bei der Arbeit mit partitionierten Tabellen<\/p>\n<pre><code class=\"sql\">DEALLOCATE ALL;\nPREPARE q(text) AS SELECT 'const', $1::text;\nEXECUTE q('param'::text);\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Planarchive<\/h3>\n<p>\nF\u00fcgen Sie hinzu, analysieren Sie, teilen Sie mit Kollegen! Die Pl\u00e4ne bleiben im Archiv, und Sie k\u00f6nnen sp\u00e4ter darauf zur\u00fcckgreifen: <noindex><a rel=\"nofollow\" href=\"https:\/\/explain.tensor.ru\/archive\/\">explain.tensor.ru\/archive<\/a><\/noindex><\/p>\n<p>Wenn Sie jedoch nicht m\u00f6chten, dass Ihr Plan von anderen gesehen wird, vergessen Sie nicht, das K\u00e4stchen \"nicht im Archiv ver\u00f6ffentlichen\" anzukreuzen.<\/p>\n<p>In den kommenden Artikeln werde ich \u00fcber die Herausforderungen und L\u00f6sungen sprechen, die bei der Analyse von Pl\u00e4nen auftreten.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/477624\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 DBA \u0438\u043b\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u2014 \u043a \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442\u0443 \u043f\u043e PostgreSQL, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e: \u00ab\u041f\u043e\u0447\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 \u0442\u0430\u043a \u0434\u043e\u043b\u0433\u043e?\u00bb \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0438\u0447\u0438\u043d: \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c JOIN \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 CTE \u043f\u043e \u043f\u0430\u0440\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0442\u044b\u0441\u044f\u0447 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0435\u0441\u043b\u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0436\u0435 \u0441\u0438\u043b\u044c\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":75679,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-75678","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.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 DBA \u0438\u043b\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u2014 \u043a \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442\u0443 \u043f\u043e PostgreSQL, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e: \u00ab\u041f\u043e\u0447\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 \u0442\u0430\u043a \u0434\u043e\u043b\u0433\u043e?\u00bb .\" \/>\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\/o-chem-molchit-explain-i-kak-ego-razgovorit\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.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 \u0447\u0435\u043c \u043c\u043e\u043b\u0447\u0438\u0442 EXPLAIN, \u0438 \u043a\u0430\u043a \u0435\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 DBA \u0438\u043b\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u2014 \u043a \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442\u0443 \u043f\u043e PostgreSQL, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e: \u00ab\u041f\u043e\u0447\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 \u0442\u0430\u043a \u0434\u043e\u043b\u0433\u043e?\u00bb .\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/o-chem-molchit-explain-i-kak-ego-razgovorit\" \/>\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=\"2020-03-27T17:42:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-27T17:42:27+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\udd47Was EXPLAIN verschweigt und wie man es zum Sprechen bringt | ProHoster","description":"Die klassische Frage, die ein Entwickler an seinen DBA oder einen Unternehmensinhaber \u2013 den Consultant f\u00fcr PostgreSQL \u2013 stellt, lautet fast immer gleich: \"Warum dauern die Abfragen in der Datenbank so lange?\"","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/o-chem-molchit-explain-i-kak-ego-razgovorit","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 \u0447\u0435\u043c \u043c\u043e\u043b\u0447\u0438\u0442 EXPLAIN, \u0438 \u043a\u0430\u043a \u0435\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c | ProHoster","og:description":"\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u0441\u0432\u043e\u0435\u043c\u0443 DBA \u0438\u043b\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u2014 \u043a \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442\u0443 \u043f\u043e PostgreSQL, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e: \u00ab\u041f\u043e\u0447\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u0430\u0437\u0435 \u0442\u0430\u043a \u0434\u043e\u043b\u0433\u043e?\u00bb .","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/o-chem-molchit-explain-i-kak-ego-razgovorit","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":"2020-03-27T17:42:27+00:00","article:modified_time":"2020-03-27T17:42:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"75678","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:51:29","updated":"2022-09-30 01:03:00","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\/75678","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=75678"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/75678\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/75679"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=75678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=75678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=75678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}