{"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\/fr\/blog\/administrirovanie\/o-chem-molchit-explain-i-kak-ego-razgovorit","title":{"rendered":"De quoi EXPLAIN se tait-il, et comment le faire parler","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Une question classique que les d\u00e9veloppeurs posent presque toujours \u00e0 leur DBA ou au consultant PostgreSQL est : <i>\u00ab Pourquoi les requ\u00eates prennent-elles autant de temps \u00e0 s'ex\u00e9cuter ? \u00bb<\/i><\/p>\n<p>Un ensemble traditionnel de raisons :<\/p>\n<ul>\n<li><b>un algorithme inefficace<\/b><br \/>\nlorsque vous essayez de faire un JOIN entre plusieurs CTE avec des dizaines de milliers d'enregistrements<\/li>\n<li><b>Ce point est particuli\u00e8rement important pour PostgreSQL, lorsque vous avez \u00ab d\u00e9vers\u00e9 \u00bb un grand ensemble de donn\u00e9es sur le serveur, vous faites une requ\u00eate \u2014 et celui-ci effectue une \u00ab scan s\u00e9quentielle \u00bb sur la table. Parce qu'hier, il y avait 10 enregistrements, et aujourd'hui 10 millions, mais PostgreSQL n'est pas encore au courant, et il faut le lui signaler. [<\/b><br \/>\nsi la distribution r\u00e9elle des donn\u00e9es dans la table diff\u00e8re significativement de celle collect\u00e9e par ANALYZE lors de la derni\u00e8re ex\u00e9cution<\/li>\n<li><b>Vous avez install\u00e9 une grande base de donn\u00e9es lourde sur un serveur faible, manquant d'espace disque, de m\u00e9moire et de puissance processeur. Et voil\u00e0\u2026 Il y a un seuil de performance au-del\u00e0 duquel vous ne pouvez plus sauter.<\/b><br \/>\net si les capacit\u00e9s de calcul CPU d\u00e9di\u00e9es ne suffisent plus, que des gigaoctets de m\u00e9moire sont constamment sollicit\u00e9s ou que le disque ne peut pas suivre toutes les \u00ab demandes \u00bb de la base de donn\u00e9es<\/li>\n<li><b>de blocage<\/b> en raison de processus concurrents<\/li>\n<\/ul>\n<p>\nEt si les blocages sont assez difficiles \u00e0 capturer et \u00e0 analyser, pour tout le reste, il nous suffit <b>du plan de requ\u00eate<\/b>, que l'on peut obtenir en utilisant <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/using-explain\">l'instruction EXPLAIN<\/a><\/noindex> (<i>il est pr\u00e9f\u00e9rable de commencer directement par EXPLAIN (ANALYZE, BUFFERS) \u2026<\/i>) ou <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/12\/auto-explain\">le module auto_explain<\/a><\/noindex>.<\/p>\n<p>Cependant, comme le dit la documentation, <\/p>\n<blockquote><p>\u00ab Comprendre le plan est un art, et pour le ma\u00eetriser, une certaine exp\u00e9rience est n\u00e9cessaire, \u2026 \u00bb<\/p><\/blockquote>\n<p> Mais on peut s'en passer si l'on utilise un outil appropri\u00e9 !<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n\u00c0 quoi ressemble g\u00e9n\u00e9ralement un plan de requ\u00eate ? En quelque sorte comme cela :<\/p>\n<pre><code class=\"plaintext\">Index Scan utilisant pg_class_relname_nsp_index sur pg_class (temps r\u00e9el=0.049..0.050 lignes=1 boucles=1)\n  Condition d'index : (relname = $1)\n  Filtre : (oid = $0)\n  Buffers : hit partag\u00e9=4\n  InitPlan 1 (retourne $0,$1)\n    -&gt; Limite (temps r\u00e9el=0.019..0.020 lignes=1 boucles=1)\n          Buffers : hit partag\u00e9=1\n          -&gt; Scan S\u00e9quentiel sur pg_class pg_class_1 (temps r\u00e9el=0.015..0.015 lignes=1 boucles=1)\n                Filtre : (relkind = 'r'::\"char\")\n                Lignes supprim\u00e9es par le filtre : 5\n                Buffers : hit partag\u00e9=1<\/code><\/pre>\n<p>\nou comme \u00e7a :<\/p>\n<pre><code class=\"plaintext\">\"Append  (co\u00fbt=868.60..878.95 lignes=2 largeur=233) (temps r\u00e9el=0.024..0.144 lignes=2 boucles=1)\"\n\"  Buffers : hit partag\u00e9=3\"\n\"  CTE cl\"\n\"    -&gt; Scan S\u00e9quentiel sur pg_class  (co\u00fbt=0.00..868.60 lignes=9972 largeur=537) (temps r\u00e9el=0.016..0.042 lignes=101 boucles=1)\"\n\"          Buffers : hit partag\u00e9=3\"\n\"  -&gt; Limite  (co\u00fbt=0.00..0.10 lignes=1 largeur=233) (temps r\u00e9el=0.023..0.024 lignes=1 boucles=1)\"\n\"        Buffers : hit partag\u00e9=1\"\n\"        -&gt; Scan CTE sur cl  (co\u00fbt=0.00..997.20 lignes=9972 largeur=233) (temps r\u00e9el=0.021..0.021 lignes=1 boucles=1)\"\n\"              Buffers : hit partag\u00e9=1\"\n\"  -&gt; Limite  (co\u00fbt=10.00..10.10 lignes=1 largeur=233) (temps r\u00e9el=0.117..0.118 lignes=1 boucles=1)\"\n\"        Buffers : hit partag\u00e9=2\"\n\"        -&gt; Scan CTE sur cl cl_1  (co\u00fbt=0.00..997.20 lignes=9972 largeur=233) (temps r\u00e9el=0.001..0.104 lignes=101 boucles=1)\"\n\"              Buffers : hit partag\u00e9=2\"\n\"Temps de planification : 0.634 ms\"\n\"Temps d'ex\u00e9cution : 0.248 ms\"<\/code><\/pre>\n<p>\nMais lire le plan textuellement \u00ab \u00e0 la vol\u00e9e \u00bb est tr\u00e8s difficile et peu clair :<\/p>\n<ul>\n<li>dans le n\u0153ud, est affich\u00e9 <b>la somme des ressources de l'arbre sous-jacent<\/b><br \/>\nc'est-\u00e0-dire que pour comprendre combien de temps a \u00e9t\u00e9 utilis\u00e9 pour ex\u00e9cuter un n\u0153ud sp\u00e9cifique, ou combien de donn\u00e9es ont \u00e9t\u00e9 effectivement r\u00e9cup\u00e9r\u00e9es de la table \u2014 il faut soustraire une valeur d'une autre<\/li>\n<li>le temps du n\u0153ud doit \u00eatre <b>multipli\u00e9 par les loops<\/b><br \/>\nOui, la soustraction n'est pas l'op\u00e9ration la plus difficile \u00e0 faire \u00ab mentalement \u00bb \u2014 en effet, le temps d'ex\u00e9cution est indiqu\u00e9 en moyenne pour un seul n\u0153ud, alors qu'il peut y en avoir des centaines.<\/li>\n<li>Eh bien, tout cela complique la r\u00e9ponse \u00e0 la question principale \u2014 alors, qui est-ce ? <b>\u00ab Le maillon le plus faible \u00bb<\/b>?<\/li>\n<\/ul>\n<p>\nLorsque nous avons essay\u00e9 d'expliquer tout cela \u00e0 plusieurs centaines de nos d\u00e9veloppeurs, nous avons r\u00e9alis\u00e9 que de l'ext\u00e9rieur, cela ressemblait \u00e0 peu pr\u00e8s \u00e0 cela :<\/p>\n<p><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/abb07e902639b5ec245851aa4a0edb58.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAlors, nous avons besoin de\u2026<\/p>\n<h2>Outil<\/h2>\n<p>\nDans celui-ci, nous avons essay\u00e9 de rassembler toutes les m\u00e9caniques cl\u00e9s qui aident \u00e0 comprendre, en fonction du plan et de la demande, \u00ab qui est responsable et que faire \u00bb. Et aussi, de partager une partie de notre exp\u00e9rience avec la communaut\u00e9.<br \/>\nFaites connaissance et utilisez \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/explain.tensor.ru\/\">explain.tensor.ru<\/a><\/noindex> <\/p>\n<h3>Clart\u00e9 des plans<\/h3>\n<p>\nEst-il facile de comprendre un plan lorsqu'il ressemble \u00e0 cela ?<\/p>\n<pre><code class=\"plaintext\">Seq Scan on pg_class (temps r\u00e9el=0.009..1.304 lignes=6609 boucles=1)\n  Buffers : partag\u00e9s hit=263\nTemps de planification : 0.108 ms\nTemps d'ex\u00e9cution : 1.800 ms\n<\/code><\/pre>\n<p>\nPas vraiment.<\/p>\n<p>Mais ainsi, <b>dans une version abr\u00e9g\u00e9e<\/b>, lorsque les indicateurs cl\u00e9s sont s\u00e9par\u00e9s \u2014 c'est d\u00e9j\u00e0 beaucoup plus clair :<\/p>\n<p><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/18404ce800de847f1934ac2c7fef10be.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMais si le plan est plus complexe \u2014 un <b>diagramme \u00e0 secteurs de distribution du temps<\/b> par n\u0153uds :<\/p>\n<p><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/ca9fdd07278801e4f3ad15e997efc1a0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEh bien, pour les cas les plus complexes, le <b>diagramme d'ex\u00e9cution<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/c03f358858206d7ccae20fd8142baa8c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPar exemple, il existe des situations suffisamment non triviales o\u00f9 un plan peut avoir plus d'une racine r\u00e9elle :<\/p>\n<p><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/ea4f3f498737e9cc3f8f40c16a5bd1d7.png\" style=\"display:block;margin: 0 auto;\" \/><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/267273e8491d6b4403442672612c33ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Conseils structurels<\/h3>\n<p>\nEh bien, si toute la structure du plan et ses points faibles sont d\u00e9j\u00e0 \u00e9tablis et visibles \u2014 pourquoi ne pas les mettre en \u00e9vidence pour le d\u00e9veloppeur, et expliquer \u00ab en termes simples \u00bb ?<\/p>\n<p><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/0e7157a09f7f5707e769cc1d6a8f3af8.png\" style=\"display:block;margin: 0 auto;\" \/>Nous avons d\u00e9j\u00e0 rassembl\u00e9 une bonne dizaine de ces mod\u00e8les de recommandations.<\/p>\n<h3>Profilage ligne par ligne de la requ\u00eate<\/h3>\n<p>\nMaintenant, si vous appliquez la requ\u00eate d'origine au plan analys\u00e9, vous pouvez voir combien de temps chaque op\u00e9rateur individuel a pris \u2014 \u00e0 peu pr\u00e8s comme cela :<\/p>\n<p><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/0766d331798d529363d10006ace211f3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 ou m\u00eame comme \u00e7a :<\/p>\n<p><img decoding=\"async\" alt=\"De quoi EXPLAIN se tait-il, et comment le faire parler\" src=\"\/wp-content\/uploads\/2020\/03\/4efd23d84792c5a7f54b40e86ff17353.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Substitution de param\u00e8tres dans la requ\u00eate<\/h3>\n<p>\nSi vous avez \u00ab attach\u00e9 \u00bb au plan non seulement la requ\u00eate, mais aussi ses param\u00e8tres depuis la ligne DETAIL du journal, vous pouvez la copier de mani\u00e8re suppl\u00e9mentaire dans l'une des variantes :<\/p>\n<ul>\n<li>avec substitution des valeurs dans la requ\u00eate<br \/>\npour une ex\u00e9cution imm\u00e9diate sur votre propre base et un profilage ult\u00e9rieur<\/p>\n<pre><code class=\"sql\">SELECT 'const', 'param'::text;<\/code><\/pre>\n<\/li>\n<li>avec substitution des valeurs via PREPARE\/EXECUTE<br \/>\npour simuler le fonctionnement du planificateur, lorsque la partie param\u00e9trique peut \u00eatre ignor\u00e9e \u2014 par exemple, lors de l'utilisation de tables partitionn\u00e9es<\/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>Archives des plans<\/h3>\n<p>\nIns\u00e9rez, analysez, partagez avec vos coll\u00e8gues ! Les plans resteront archiv\u00e9s, et vous pourrez y revenir plus tard : <noindex><a rel=\"nofollow\" href=\"https:\/\/explain.tensor.ru\/archive\/\">explain.tensor.ru\/archive<\/a><\/noindex><\/p>\n<p>Mais si vous ne voulez pas que votre plan soit vu par d'autres, n'oubliez pas de cocher la case \u00ab ne pas publier dans l'archive \u00bb.<\/p>\n<p>Dans les prochains articles, je parlerai des difficult\u00e9s et des solutions qui surgissent lors de l'analyse des plans.<br \/>\n<br \/>Source : <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.2.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\/fr\/blog\/administrirovanie\/o-chem-molchit-explain-i-kak-ego-razgovorit\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47De quoi EXPLAIN se tait, et comment le faire parler | ProHoster","description":"La question classique que se pose un d\u00e9veloppeur \u00e0 son DBA ou un propri\u00e9taire d'entreprise \u00e0 son consultant PostgreSQL est presque toujours la m\u00eame : \u00ab Pourquoi les requ\u00eates mettent-elles autant de temps \u00e0 s'ex\u00e9cuter ? \u00bb.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/o-chem-molchit-explain-i-kak-ego-razgovorit","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/75678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=75678"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/75678\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/75679"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=75678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=75678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=75678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}