{"id":9625,"date":"2023-02-01T11:26:43","date_gmt":"2023-02-01T10:26:43","guid":{"rendered":"https:\/\/blog.capdata.fr\/?p=9625"},"modified":"2023-03-29T15:54:02","modified_gmt":"2023-03-29T14:54:02","slug":"oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/","title":{"rendered":"Oracle : SQL Plan Management en version Standard Edition SE2"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9625&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9625&#038;title=Oracle%20%3A%20SQL%20Plan%20Management%20en%20version%20Standard%20Edition%20SE2\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Oracle%20%3A%20SQL%20Plan%20Management%20en%20version%20Standard%20Edition%20SE2&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9625\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-9643\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm11-300x258.jpg\" alt=\"\" width=\"300\" height=\"258\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm11-300x258.jpg 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm11.jpg 417w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Hello<\/p>\n<p>En ce d\u00e9but d&#8217;ann\u00e9e, apr\u00e8s l&#8217;article PostgreSQL de Sarah sur le <a href=\"https:\/\/blog.capdata.fr\/index.php\/pyrseas-et-postgresql-comparer-facilement-des-schema-de-base-de-donnees\/\">comparatif de sch\u00e9mas<\/a>, je vous propose une petite \u00e9tude de l&#8217;utilisation de SPM, ou SQL Plan Management sur une instance Oracle. L&#8217;id\u00e9e serait de savoir, comment utiliser cette fonctionnalit\u00e9 SQL Plan Management avec une version Oracle Standard Edition SE2.<\/p>\n<p>&nbsp;<\/p>\n<h3>Le SPM ?<\/h3>\n<p>Pour rappel, SPM ou SQL Plan Management, est un outil permettant au DBA de stabiliser les plans d&#8217;ex\u00e9cutions de requ\u00eates qui ont tendance \u00e0 fortement d\u00e9vier. Il y a plusieurs raisons possibles \u00e0 cela.<\/p>\n<ul>\n<li>bind peeking. Je vous recommande cet excellent article de <a href=\"http:\/\/ahmedaangour.blogspot.com\/2011\/01\/bind-variable-peeking.html\">Ahmed Aangour<\/a> sur les concepts des bind variables et les cons\u00e9quences que cela implique.<\/li>\n<li>statistiques et passages d&#8217;histogrammes. Vos plans d&#8217;ex\u00e9cution sont fortement impact\u00e9s si la r\u00e9partition de vos valeurs est dite &#8220;skewed&#8221;.<\/li>\n<li>Le m\u00e9canisme ACS ou Adataptive Curosr Sharing, arriv\u00e9 en version 11g, consiste \u00e0 adapter les plans d&#8217;une m\u00eame requ\u00eate &#8220;bind\u00e9e&#8221;. Le choix du plan se fera en fonction des variables enregistr\u00e9es au moment du parsing.<br \/>\nConfigurer le param\u00e8tre CURSOR_SHARING en fonction de votre application.<\/p>\n<ul>\n<li>La valeur EXACT si vous souhaitez utiliser ACS pour les requ\u00eates avec des bind variables (votre applicatif g\u00e8re la cr\u00e9ation de binds).<\/li>\n<li>La valeur FORCE va transformer si possible les requ\u00eates adhoc sans binds pour forcer \u00e0 utiliser le m\u00e9canisme ACS (votre applicatif de g\u00e9n\u00e8re que du code dynamique).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Avant la version 11g, le DBA avait la possibilit\u00e9 d&#8217;utiliser les &#8220;outlines&#8221; afin de positionner des r\u00e8gles (hints). Cela s&#8217;effectuait selon le texte de la requ\u00eate ou bien selon son &#8216;hash_value&#8217;.<br \/>\nIl \u00e9tait \u00e9galement possible de cr\u00e9er des &#8220;SQL Profiles&#8221; en version 10g. L&#8217;approche etait davantage bas\u00e9e sur le concept de stabilit\u00e9 de plans en fonctions des donn\u00e9es collect\u00e9es.<\/p>\n<p>Avec SQL Plan Management, il est n\u00e9cessaire de cr\u00e9er ce que l&#8217;on appelle des &#8220;SQL Plan baselines&#8221;. Ce sont des plans de r\u00e9f\u00e9rence sur lesquels s&#8217;appuie la fonctionnalit\u00e9 SPM pour garantir \u00e0 chaque requ\u00eate de trouver le chemin le plus optimal possible.<\/p>\n<p>Comment pouvons nous l&#8217;impl\u00e9menter, et ce avec une version Standard Edition Oracle ? Que devons nous prendre en consid\u00e9ration ?<\/p>\n<p>&nbsp;<\/p>\n<h3>Licensing li\u00e9 au SQL Plan Management<\/h3>\n<p>Il est de coutume, lorsque l&#8217;on utilise des fonctionnalit\u00e9s &#8220;exotiques&#8221; Oracle, de toujours regarder au niveau du &#8220;licensing&#8221; si nous sommes dans les r\u00e8gles pour notre instance de bases de donn\u00e9es.<br \/>\nOn ne rappellera jamais assez qu&#8217;un audit Oracle peut avoir de f\u00e2cheuses cons\u00e9quences si l&#8217;on utilise des options que l&#8217;on aurait, plus ou moins, oubli\u00e9 de d\u00e9clarer.<\/p>\n<p>Pour une version Standard Edition SE2, Oracle est assez clair, et ce, depuis la version 18c<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9627 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm1.jpg\" alt=\"\" width=\"1258\" height=\"128\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm1.jpg 1258w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm1-300x31.jpg 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm1-1024x104.jpg 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm1-768x78.jpg 768w\" sizes=\"auto, (max-width: 1258px) 100vw, 1258px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9628 size-full\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm2.jpg\" alt=\"\" width=\"1261\" height=\"786\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm2.jpg 1261w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm2-300x187.jpg 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm2-1024x638.jpg 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm2-768x479.jpg 768w\" sizes=\"auto, (max-width: 1261px) 100vw, 1261px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Utiliser SQL Plan Management en ne d\u00e9clarant qu&#8217;une et une seule SQL Plan baseline pour un et un seul SQL_ID donn\u00e9.<\/p>\n<p>Pour la cr\u00e9ation du SQL Plan Baseline, vous pouvez :<\/p>\n<ul>\n<li>aller chercher manuellement une requ\u00eate encore dans le cache, puis charger celle ci<\/li>\n<li>mettre en place la capture automatique, mais attention, seule 1 SQL Plan Baseline ne sera possible pour 1 seule requ\u00eate.<\/li>\n<li>migrer un stored outline vers une SQL Plan baseline via\u00a0 proc\u00e9dure MIGRATE_STORED_OUTLINE<\/li>\n<li>importer depuis une autre SQL Plan Baseline.<\/li>\n<\/ul>\n<p>Dans le cadre de cet article, il s&#8217;agit d&#8217;une requ\u00eate que nous avons charg\u00e9 en cache et dont nous souhaitons fixer le plan.<\/p>\n<p>&nbsp;<\/p>\n<h3>Cas d&#8217;\u00e9tude SQL Plan Management sur Oracle Standard Edition SE2<\/h3>\n<p>Nous avons eu r\u00e9cemment un souci de performances chez un de nos clients.<\/p>\n<p>Chaque nuit, un applicatif m\u00e9tier lance un traitement de chargement afin d&#8217;alimenter certaines tables.<br \/>\nNous avons relev\u00e9 un souci pour une des requ\u00eates du traitement. Un plan d&#8217;ex\u00e9cution changeait et les temps de r\u00e9ponses se d\u00e9gradaient fortement et ce jusqu&#8217;au matin.<br \/>\nNous devions pour rem\u00e9dier \u00e0 ce probl\u00e8me, sortir le curseur, propre \u00e0 cette requ\u00eate, de la &#8220;shared pool&#8221;, via un DBMS_SHARED.PURGE.<br \/>\nPar la suite, un recalcule des statistiques sur les tables impact\u00e9es.<\/p>\n<p>C&#8217;est gr\u00e2ce \u00e0 notre agent Alldb Capdata que nous mettons en place chez nos clients, dans le cadre du contrat d&#8217;infog\u00e9rance pass\u00e9 ensemble, que nous avons pu relever toutes les informations n\u00e9cessaires.<br \/>\nEn effet, nous avons rapidement pos\u00e9 un diagnostic sur la requ\u00eate la plus consommatrice en terme de &#8220;Elapsed time&#8221; sur la p\u00e9riode donn\u00e9e.<\/p>\n<p>&nbsp;<\/p>\n<p>Vue globale des requ\u00eates consommatrices\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Pourcentage de la requ\u00eate la plus consommatrice<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-9629\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm4-300x201.jpg\" alt=\"\" width=\"300\" height=\"201\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm4-300x201.jpg 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm4.jpg 453w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9630\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm5.jpg\" alt=\"\" width=\"210\" height=\"254\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Nous avons donc relev\u00e9 une requ\u00eate responsable de plus de 25% du temps totale ex\u00e9cut\u00e9 en base. Celle ci se pr\u00e9sente sous cette forme.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9631 \" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm6.jpg\" alt=\"\" width=\"564\" height=\"172\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm6.jpg 626w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm6-300x92.jpg 300w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Simple jointure entre 2 tables avec 3 bind variables &#8230;. mais il s&#8217;agit d&#8217;une fonction, encapsul\u00e9e dans un SELECT d&#8217;une autre requ\u00eate, qui g\u00e9n\u00e8re cette requ\u00eate &#8230;..<br \/>\nEn une nuit, le nombre d&#8217;ex\u00e9cution par secondes a d\u00e9pass\u00e9 les 85 !<br \/>\nNous avons remarqu\u00e9 que cette requ\u00eate avait 2 plans calcul\u00e9s<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9632\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm7.jpg\" alt=\"\" width=\"176\" height=\"118\" \/><\/p>\n<p>La requ\u00eate charge un premier plan utilis\u00e9 \u00e0 plus de 99%. Malheureusement pour nous, il n&#8217;est pas le plus optimal !<\/p>\n<p>&nbsp;<\/p>\n<p>Temps moyen premier plan<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9633 \" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm8.jpg\" alt=\"\" width=\"698\" height=\"264\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm8.jpg 764w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm8-300x113.jpg 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/p>\n<p>Temps moyen second plan<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9634 \" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm9.jpg\" alt=\"\" width=\"618\" height=\"279\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm9.jpg 734w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm9-300x135.jpg 300w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Une moyenne de 3000 secondes pour le 1er plan, quand le 2nd comporte, lui, permet une ex\u00e9cution moyenne en moins de 60 secondes.<\/p>\n<p>L&#8217;objectif, avec SPM, est donc de fixer une bonne foi pour toute le plan 4020957239 pour notre requ\u00eate.<\/p>\n<p>&nbsp;<\/p>\n<h3>Impl\u00e9mentations de SQL Plan Management<\/h3>\n<p>Afin de partir sur des bases saines, et avec accord du client, nous avons du sortir du cache la requ\u00eate en question.<\/p>\n<p>Recherche si celle ci est encore en m\u00e9moire parmi nos requ\u00eates actives.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">select S.username, S.program,S.event,TO_CHAR(sysdate-(S.last_call_et\/86400),'YYYY\/MM\/DD HH24:MI:SS') &quot;LAST_EXEC&quot;, SA.sql_text,SA.plan_hash_value,sa.address,sa.hash_value\r\nFROM V$SESSION S LEFT JOIN V$SQL SA ON (SA.sql_id = S.sql_id)\r\nWHERE S.TYPE!='BACKGROUND' AND S.STATUS = 'ACTIVE';\r\n\r\n<\/pre>\n<p>Relever son ADDRESS et son HASH_VALUE et la purger du cache.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">EXEC DBMS_SHARED_POOL.purge('&amp;amp;amp;amp;ADDRESS.,&amp;amp;amp;amp;HASH_VALUE.', 'C');<\/pre>\n<p>Passer les statistiques sur les 2 tables qui forment notre requ\u00eate, en prenant soin de calculer les histogrammes.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">EXEC DBMS_STATS.GATHER_TABLE_STATS('owner','table1',method_opt='FOR ALL COLUMNS SIZE AUTO', cascade=TRUE);\r\nEXEC DBMS_STATS.GATHER_TABLE_STATS('owner','table2',method_opt='FOR ALL COLUMNS SIZE AUTO', cascade=TRUE);<\/pre>\n<p>Puis demander au client de relancer son traitement appelant cette m\u00eame requ\u00eate !<br \/>\nV\u00e9rifier que celle ci contient un nouveau chargement en cache avec cette fois ci le bon plan qui nous int\u00e9resse.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">select sql_id, sql_text, plan_hash_value, sql_plan_baseline , last_load_time, last_active_time from v$sql where sql_text like '%SELECT MIN(O.NUM_OPERATION)%';\r\n\r\nSQL_ID        SQL_TEXT                               PLAN_HASH_VALUE SQL_PLAN_BASELINE\r\n------------- -------------------------------------- --------------- -------------------------\r\n0kjwvsctw4n3m SELECT MIN(O.NUM_OPERATION) FROM ***** 4020957239\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Chargeons ces nouvelles valeurs dans une nouvelle SQL Plan Baseline.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">VARIABLE bon_plan NUMBER\r\nBEGIN\r\n   bon_plan:=DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id ='0kjwvsctw4n3m');\r\nEND;\r\n\r\nPL\/SQL procedure successfully completed.\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>On se base sur &#8220;exact matching signature&#8221; de notre requ\u00eate pour cr\u00e9er notre SQL Plan Baseline. Notre requ\u00eate contient des bind variables et un CURSOR_SHARING \u00e0 EXACT.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">select signature, sql_handle, plan_name, enabled, accepted, fixed\r\nfrom dba_sql_plan_baselines \r\nwhere signature = (select exact_matching_signature from v$sql where sql_id='0kjwvsctw4n3m');\r\n\r\nSIGNATURE           SQL_HANDLE                     PLAN_NAME                      ENA ACC FIX\r\n------------------- ------------------------------ ------------------------------ --- --- ---\r\n772438594058345972  SQL_0ab840cf09a65df4           SQL_PLAN_0pf20tw4ucrgn0ada5bac YES YES NO\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Maintenant que nous avons notre requ\u00eate en cache et le SQL Plan Baseline cr\u00e9\u00e9, nous pouvons fixer cette baseline pour cette requ\u00eate.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">declare\r\n  plan_charger pls_integer ;\r\nBEGIN\r\n  plan_charger := dbms_spm.alter_sql_plan_baseline(\r\n    sql_handle = 'SQL_0ab840cf09a65df4',\r\n    plan_name ='SQL_PLAN_0pf20tw4ucrgn0ada5bac',\r\n    attribute_name = 'fixed',\r\n    attribute_value = 'YES'\r\n) ;\r\nEND ;\r\n\/\r\n\r\nPL\/SQL procedure successfully completed.\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Nous v\u00e9rifions La SQL Plan baseline<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">select b.SQL_HANDLE,b.PLAN_NAME,B.accepted,b.enabled,b.fixed,s.sql_id from dba_sql_plan_baselines b inner join v$sql s on (b.signature=s.EXACT_MATCHING_SIGNATURE);\r\n\r\nSQL_HANDLE                     PLAN_NAME                      ACC ENA FIX SQL_ID\r\n------------------------------ ------------------------------ --- --- --- -------------\r\nSQL_0ab840cf09a65df4           SQL_PLAN_0pf20tw4ucrgn0ada5bac YES YES YES 0kjwvsctw4n3m\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Apr\u00e8s plusieurs jours d&#8217;utilisation, le client ne nous a plus remont\u00e9 de souci sur sa proc\u00e9dure de nuit.<\/p>\n<p>Et nous avons pu voir que notre requ\u00eate en question utilise bien chaque jour notre SQL Plan Baseline au moment de son chargement en cache<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">select sql_id, substr(sql_text,1,25), plan_hash_value, sql_plan_baseline , last_load_time, last_active_time from v$sql where sql_id='0kjwvsctw4n3m';\r\n\r\nSQL_ID        SUBSTR(SQL_TEXT,1,25)     PLAN_HASH_VALUE SQL_PLAN_BASELINE                   LAST_LOAD_TIME      LAST_ACTIVE_TIME\r\n------------- ------------------------- --------------- ----------------------------------- ------------------- -------------------\r\n0kjwvsctw4n3m SELECT MIN(O.NUM_OPERATIO 4020957239      SQL_PLAN_0pf20tw4ucrgn0ada5bac      2023-01-11\/12:22:06 2023\/01\/11 12:41:46\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Les informations relatives au plan charg\u00e9 sont les suivantes :<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">SELECT PLAN_TABLE_OUTPUT FROM V$SQL s, DBA_SQL_PLAN_BASELINES b, TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(b.sql_handle,b.plan_name,'basic')) t\r\nWHERE s.EXACT_MATCHING_SIGNATURE=b.SIGNATURE AND b.PLAN_NAME=s.SQL_PLAN_BASELINE AND s.SQL_ID='0kjwvsctw4n3m';\r\nPLAN_TABLE_OUTPUT\r\n--------------------------------------------------------------------------------\r\n--------------------------------------------------------------------------------\r\nSQL handle: SQL_0ab840cf09a65df4\r\nSQL text: SELECT MIN(O.NUM_OPERAT*************\r\n--------------------------------------------------------------------------------\r\n--------------------------------------------------------------------------------\r\nPlan name: SQL_PLAN_0pf20tw4ucrgn0ada5bac Plan id: 182082476\r\nEnabled: YES Fixed: YES Accepted: YES Origin: MANUAL-LOAD-FROM-CURSOR-CACHE\r\nPlan rows: From dictionary\r\n--------------------------------------------------------------------------------\r\nPlan hash value: 4020957239\r\n--------------------------------------------------------------------------------\r\n| Id | Operation                                                                |\r\n--------------------------------------------------------------------------------\r\n|   0 | SELECT STATEMENT                                                        |\r\n|   1 | SORT AGGREGATE                                                          |\r\n|   2 |   NESTED LOOPS SEMI                                                     |\r\n|   3 |    TABLE ACCESS BY INDEX ROWID BATCHED| ***************                 |\r\n|   4 |     INDEX RANGE SCAN                  | INDX_*******WEB_AFF             |\r\n|   5 |     TABLE ACCESS BY INDEX ROWID       | ***************                 |\r\n|   6 |     INDEX UNIQUE SCAN                 | INDX_****                       |\r\n--------------------------------------------------------------------------------\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>Remarques li\u00e9s \u00e0 SQL Plan Management<\/h3>\n<p>&nbsp;<\/p>\n<p>Voici quelques remarques que nous pouvons faire au sujet de SPM pour notre version Standard Edition SE2. Ici, nous avons pu fixer un plan qui nous paraissait bon, mais si nous n&#8217;avions pas pu trouver un plan correct, quel aurait \u00e9t\u00e9 le proc\u00e9d\u00e9 \u00e0 suivre ?<br \/>\nLa version Standard Edition nous permet d&#8217;utiliser le param\u00e8tre &#8220;optimizer_capture_sql_plan_baselines&#8221; \u00e0 TRUE, mais Oracle ne nous autorise \u00e0 utiliser que une et une seule SQL Plan Baseline.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\noptimizer_capture_sql_plan_baselines boolean     FALSE\r\n<\/pre>\n<p>Nous aurions donc du passer par la proc\u00e9dure &#8220;DBMS_SPM.DROP_SQL_PLAN_BASELINE&#8221; \u00e0 chaque nouvelle SQL Plan Baseline correspondant \u00e0 notre EXACT MATCHING SIGNATURE&#8230;.<\/p>\n<p>Autre point \u00e0 prendre en consid\u00e9ration, la vue &#8220;dba_feature_usgae_statistics&#8221; remonte bien l&#8217;utilisation de SPM, avec la date de premi\u00e8re utilisation lors de la cr\u00e9ation de notre SQL Plan Baseline<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">select name c1, detected_usages c2, first_usage_date c3, currently_used c4\r\nfrom dba_feature_usage_statistics where first_usage_date is not null and name like '%SQL Plan%';\r\n\r\n                                              times    first               used\r\nfeature                                       used     used                now\r\n--------------------------------------------- -------- ------------------- -----\r\nSQL Plan Directive                            68       2021\/09\/15 17:54:04 TRUE\r\nSQL Plan Management                            1       2023\/01\/07 22:49:00 TRUE\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>N&#8217;h\u00e9sitez pas \u00e0 poster des commentaires si besoin !<\/p>\n<p>: -)<\/p>\n<p>&nbsp;<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9625&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9625&#038;title=Oracle%20%3A%20SQL%20Plan%20Management%20en%20version%20Standard%20Edition%20SE2\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Oracle%20%3A%20SQL%20Plan%20Management%20en%20version%20Standard%20Edition%20SE2&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F9625\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>Hello En ce d\u00e9but d&#8217;ann\u00e9e, apr\u00e8s l&#8217;article PostgreSQL de Sarah sur le comparatif de sch\u00e9mas, je vous propose une petite \u00e9tude de l&#8217;utilisation de SPM, ou SQL Plan Management sur une instance Oracle. L&#8217;id\u00e9e serait de savoir, comment utiliser cette&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":32,"featured_media":9642,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[439,221,440,61],"class_list":["post-9625","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-oracle19c","tag-performance","tag-sql-plan-management","tag-statistiques"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Oracle : SQL Plan Management en version Standard Edition SE2 - Capdata TECH BLOG<\/title>\n<meta name=\"description\" content=\"Oracle SQL Plan Management Standard Edition SE2\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle : SQL Plan Management en version Standard Edition SE2 - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"Oracle SQL Plan Management Standard Edition SE2\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-01T10:26:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-29T14:54:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm10.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"552\" \/>\n\t<meta property=\"og:image:height\" content=\"301\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Emmanuel RAMI\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel RAMI\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/\"},\"author\":{\"name\":\"Emmanuel RAMI\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae\"},\"headline\":\"Oracle : SQL Plan Management en version Standard Edition SE2\",\"datePublished\":\"2023-02-01T10:26:43+00:00\",\"dateModified\":\"2023-03-29T14:54:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/\"},\"wordCount\":1970,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"oracle19c\",\"performance\",\"SQL Plan Management\",\"statistiques\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/\",\"name\":\"Oracle : SQL Plan Management en version Standard Edition SE2 - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2023-02-01T10:26:43+00:00\",\"dateModified\":\"2023-03-29T14:54:02+00:00\",\"description\":\"Oracle SQL Plan Management Standard Edition SE2\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle : SQL Plan Management en version Standard Edition SE2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae\",\"name\":\"Emmanuel RAMI\",\"sameAs\":[\"https:\/\/blog.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/erami\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Oracle : SQL Plan Management en version Standard Edition SE2 - Capdata TECH BLOG","description":"Oracle SQL Plan Management Standard Edition SE2","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/","og_locale":"fr_FR","og_type":"article","og_title":"Oracle : SQL Plan Management en version Standard Edition SE2 - Capdata TECH BLOG","og_description":"Oracle SQL Plan Management Standard Edition SE2","og_url":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2023-02-01T10:26:43+00:00","article_modified_time":"2023-03-29T14:54:02+00:00","og_image":[{"width":552,"height":301,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/spm10.jpg","type":"image\/jpeg"}],"author":"Emmanuel RAMI","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Emmanuel RAMI","Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/"},"author":{"name":"Emmanuel RAMI","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae"},"headline":"Oracle : SQL Plan Management en version Standard Edition SE2","datePublished":"2023-02-01T10:26:43+00:00","dateModified":"2023-03-29T14:54:02+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/"},"wordCount":1970,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["oracle19c","performance","SQL Plan Management","statistiques"],"articleSection":["Oracle"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/","url":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/","name":"Oracle : SQL Plan Management en version Standard Edition SE2 - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2023-02-01T10:26:43+00:00","dateModified":"2023-03-29T14:54:02+00:00","description":"Oracle SQL Plan Management Standard Edition SE2","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/oracle-utiliser-spm-avec-une-version-oracle-standard-edition-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Oracle : SQL Plan Management en version Standard Edition SE2"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/797b9b6698fa35f7ce3e9a70a8b102ae","name":"Emmanuel RAMI","sameAs":["https:\/\/blog.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/erami\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/9625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=9625"}],"version-history":[{"count":54,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/9625\/revisions"}],"predecessor-version":[{"id":9962,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/9625\/revisions\/9962"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/9642"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=9625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=9625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=9625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}