{"id":6308,"date":"2025-03-01T16:55:30","date_gmt":"2025-03-01T15:55:30","guid":{"rendered":"http:\/\/rootfan.com\/?p=6308"},"modified":"2025-03-01T16:55:33","modified_gmt":"2025-03-01T15:55:33","slug":"index-de-stockage-exadata","status":"publish","type":"post","link":"https:\/\/rootfan.com\/fr\/exadata-storage-index\/","title":{"rendered":"Index de stockage Exadata"},"content":{"rendered":"<p>Les index de stockage sont une fonctionnalit\u00e9 d'Exadata con\u00e7ue pour am\u00e9liorer les performances en r\u00e9duisant les E\/S sur disque. <\/p>\n\n\n\n<p>Contrairement aux index B-tree ou bitmap traditionnels, les index de stockage ne stockent pas de valeurs sp\u00e9cifiques pour faciliter la recherche d'enregistrements ; ils suivent plut\u00f4t les valeurs minimales, maximales et nulles des donn\u00e9es dans des blocs de stockage de 1 Mo.<\/p>\n\n\n\n<p>Voici comment ils fonctionnent :<\/p>\n\n\n\n<!--more-->\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>M\u00e9canisme de pr\u00e9-filtrage<\/strong>: Les index de stockage agissent comme un pr\u00e9-filtre. Lorsqu'une requ\u00eate est ex\u00e9cut\u00e9e, Exadata v\u00e9rifie les pr\u00e9dicats (par exemple, les conditions de la clause WHERE) par rapport aux m\u00e9tadonn\u00e9es stock\u00e9es dans les index de stockage (valeurs min, max et null). Si l'index de stockage montre qu'aucune donn\u00e9e d'un bloc de stockage de 1 Mo ne correspond aux conditions de la requ\u00eate, ce bloc est ignor\u00e9, ce qui \u00e9vite de devoir le lire sur le disque.<\/li>\n\n\n\n<li><strong>Fonctionnalit\u00e9 de m\u00e9moire seule<\/strong>: Les index de stockage sont enti\u00e8rement conserv\u00e9s en m\u00e9moire sur les cellules de stockage et ne sont jamais \u00e9crits sur le disque. Ils sont donc volatils, ce qui signifie qu'ils doivent \u00eatre reconstruits apr\u00e8s le red\u00e9marrage d'un serveur de stockage.<\/li>\n\n\n\n<li><strong>Huit colonnes<\/strong>: Un index de stockage peut suivre jusqu'\u00e0 huit colonnes d'une table. Il ne stocke pas les d\u00e9tails de chaque colonne, mais conserve dynamiquement celles qui sont le plus souvent interrog\u00e9es.<\/li>\n\n\n\n<li><strong>Optimisation des requ\u00eates<\/strong>: Les index de stockage sont particuli\u00e8rement utiles lorsqu'ils sont utilis\u00e9s avec Smart Scans, une fonction d'Exadata qui permet de traiter les requ\u00eates sur le serveur de stockage. En pr\u00e9-filtrant les donn\u00e9es non pertinentes, les index de stockage aident les Smart Scans \u00e0 r\u00e9duire la quantit\u00e9 de donn\u00e9es trait\u00e9es et renvoy\u00e9es \u00e0 la couche de base de donn\u00e9es.<\/li>\n\n\n\n<li><strong>Traitement des z\u00e9ros<\/strong>: Les index de stockage fournissent \u00e9galement une optimisation unique pour les requ\u00eates qui impliquent des valeurs nulles, permettant des recherches plus rapides sur les colonnes qui contiennent des valeurs nulles en \u00e9liminant les r\u00e9gions non nulles de la lecture.<\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Table des mati\u00e8res<\/h2><nav><ul><li><a href=\"#example-of-exadata-storage-index\">Exemple d'index de stockage Exadata<\/a><ul><li><a href=\"#scenario\">Sc\u00e9nario<\/a><\/li><li><a href=\"#query\">Demande de renseignements<\/a><\/li><li><a href=\"#storage-index-behavior\">Comportement de l'index de stockage<\/a><\/li><li><a href=\"#benefit\">B\u00e9n\u00e9fice<\/a><\/li><\/ul><\/li><li><a href=\"#ddl-of-table-and-index-creation\">DDL de la cr\u00e9ation de tables et d'index :<\/a><ul><li><a href=\"#example-ddl-for-the-orders-table\">Exemple de DDL pour la table des commandes<\/a><\/li><li><a href=\"#note-on-storage-indexes-in-exadata\">Note sur les index de stockage dans Exadata<\/a><\/li><li><a href=\"#example-of-traditional-index-creation-if-using-a-non-exadata-system\">Exemple de cr\u00e9ation d'un index traditionnel (en cas d'utilisation d'un syst\u00e8me sans exadonn\u00e9es)<\/a><\/li><li><a href=\"#how-storage-indexes-work-in-exadata\">Comment fonctionnent les index de stockage dans Exadata<\/a><\/li><\/ul><\/li><li><a href=\"#how-to-check-if-a-storage-index-has-been-used\">Comment v\u00e9rifier si un index de stockage a \u00e9t\u00e9 utilis\u00e9 ?<\/a><ul><li><a href=\"#1-v-sesstat-view\">1. V$SESSTAT Voir<\/a><\/li><li><a href=\"#2-exadata-specific-wait-events\">2. \u00c9v\u00e9nements d'attente sp\u00e9cifiques \u00e0 Exadata<\/a><\/li><li><a href=\"#3-cell-cli-command-on-the-storage-cells\">3. Commande CellCLI (sur les cellules de stockage)<\/a><\/li><li><a href=\"#4-sql-monitoring-report\">4. Rapport de surveillance SQL<\/a><\/li><li><a href=\"#5-dba-hist-sysstat-view-historical-monitoring\">5. Vue DBA_HIST_SYSSTAT (surveillance historique)<\/a><\/li><li><a href=\"#summary\">R\u00e9sum\u00e9<\/a><\/li><\/ul><\/li><li><a href=\"#dont-you-need-to-create-indexes-in-exadata\">Faut-il cr\u00e9er des index dans Exadata ?<\/a><ul><li><a href=\"#1-when-storage-indexes-are-sufficient\">1. Quand les index de stockage suffisent<\/a><\/li><li><a href=\"#2-when-traditional-indexes-are-still-needed\">2. Quand les index traditionnels sont encore n\u00e9cessaires<\/a><\/li><li><a href=\"#3-special-cases-where-you-may-still-want-traditional-indexes\">3. Cas particuliers pour lesquels il peut \u00eatre utile de conserver des indices traditionnels<\/a><\/li><li><a href=\"#4-mixed-workloads\">4. Charges de travail mixtes<\/a><\/li><li><a href=\"#conclusion\">Conclusion :<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n\n\n<p>Dans la pratique, les index de stockage peuvent am\u00e9liorer consid\u00e9rablement les performances. <\/p>\n\n\n\n<p>Ils sont plus efficaces lorsque les donn\u00e9es dans les zones de stockage sont bien regroup\u00e9es ou tri\u00e9es. <\/p>\n\n\n\n<p>Cependant, il existe des limitations : ils ne fonctionnent pas avec certains types de donn\u00e9es (par exemple, les CLOB) ou certains op\u00e9rateurs de comparaison (par exemple, \"!=\").<\/p>\n\n\n\n<p>En r\u00e9sum\u00e9, les index de stockage contribuent \u00e0 r\u00e9duire les E\/S sur disque en permettant au syst\u00e8me Exadata de ne pas lire les r\u00e9gions de stockage qui ne contiennent pas de donn\u00e9es pertinentes, ce qui se traduit par des gains significatifs en termes de performances des requ\u00eates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"example-of-exadata-storage-index\">Exemple d'index de stockage Exadata<\/h2>\n\n\n\n<p>Voici un exemple illustrant le fonctionnement des index de stockage dans Exadata :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"scenario\">Sc\u00e9nario<\/h3>\n\n\n\n<p>Supposons que vous ayez un tableau <code>commandes<\/code> qui contient les colonnes suivantes :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>order_id<\/code><\/li>\n\n\n\n<li><code>date_de_la_commande<\/code><\/li>\n\n\n\n<li><code>num\u00e9ro de client<\/code><\/li>\n\n\n\n<li><code>montant_total<\/code><\/li>\n<\/ul>\n\n\n\n<p>La table comporte 1 million de lignes et les donn\u00e9es sont r\u00e9parties entre plusieurs r\u00e9gions de stockage sur un syst\u00e8me Exadata.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"query\">Demande de renseignements<\/h3>\n\n\n\n<p>Vous ex\u00e9cutez la requ\u00eate suivante pour r\u00e9cup\u00e9rer les commandes pass\u00e9es dans une plage de dates sp\u00e9cifique :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT * \nFROM orders \nWHERE order_date BETWEEN &#039;2024-01-01&#039; AND &#039;2024-01-31&#039;;\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"storage-index-behavior\">Comportement de l'index de stockage<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Cr\u00e9ation d'un index de stockage<\/strong>: Exadata cr\u00e9e automatiquement des index de stockage lorsque la table est fr\u00e9quemment consult\u00e9e. <br>Pour chaque bloc de donn\u00e9es de 1 Mo stock\u00e9 sur les cellules de stockage, Exadata enregistre les donn\u00e9es suivantes <strong>minimum<\/strong> et <strong>maximum<\/strong> pour les <code>date_de_la_commande<\/code> colonne. <br><br>Exemple d'index de stockage pour une zone de stockage :\n<ul class=\"wp-block-list\">\n<li><strong>R\u00e9gion 1<\/strong>: <code>MIN(order_date) = '2023-11-15', MAX(order_date) = '2024-02-10'<\/code><\/li>\n\n\n\n<li><strong>R\u00e9gion 2<\/strong>: <code>MIN(order_date) = '2024-03-01', MAX(order_date) = '2024-03-31'<\/code><\/li>\n\n\n\n<li><strong>R\u00e9gion 3<\/strong>: <code>MIN(order_date) = '2023-10-05', MAX(order_date) = '2023-11-01'<\/code><br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Ex\u00e9cution de la requ\u00eate<\/strong>: Lorsque vous ex\u00e9cutez la requ\u00eate pour trouver des commandes \u00e0 partir de janvier 2024, Exadata examine d'abord les index de stockage.<br>\n<ul class=\"wp-block-list\">\n<li><strong>R\u00e9gion 1<\/strong> contient des dates entre <code>'2023-11-15'<\/code> et <code>'2024-02-10'<\/code>, de sorte que cette r\u00e9gion <strong>sera lue<\/strong> puisqu'il inclut une partie de janvier 2024.<\/li>\n\n\n\n<li><strong>R\u00e9gion 2<\/strong> contient des dates entre <code>'2024-03-01'<\/code> et <code>'2024-03-31'<\/code>Ainsi, Exadata <strong>saute cette r\u00e9gion<\/strong> enti\u00e8rement parce qu'il se situe en dehors de l'intervalle de la requ\u00eate.<\/li>\n\n\n\n<li><strong>R\u00e9gion 3<\/strong> contient des dates entre <code>'2023-10-05'<\/code> et <code>'2023-11-01'<\/code>Ainsi, Exadata <strong>saute cette r\u00e9gion<\/strong> \u00e9galement, car il n'est pas pertinent pour la requ\u00eate.<br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>R\u00e9duction des donn\u00e9es<\/strong>: Au lieu d'analyser l'ensemble de la table, Exadata ne lit que les r\u00e9gions concern\u00e9es sur le disque. <br>Cela permet de r\u00e9duire les E\/S, d'acc\u00e9l\u00e9rer les requ\u00eates et d'optimiser les performances du syst\u00e8me.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"benefit\">B\u00e9n\u00e9fice<\/h3>\n\n\n\n<p>Dans ce cas, Exadata ayant ignor\u00e9 les r\u00e9gions de stockage non pertinentes (r\u00e9gion 2 et r\u00e9gion 3), la requ\u00eate se termine plus rapidement, ce qui se traduit par des co\u00fbts d'E\/S nettement inf\u00e9rieurs. <\/p>\n\n\n\n<p>C'est un exemple de la fa\u00e7on dont les index de stockage aident Exadata \u00e0 contourner les donn\u00e9es inutiles et \u00e0 am\u00e9liorer les performances des requ\u00eates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ddl-of-table-and-index-creation\">DDL de la cr\u00e9ation de tables et d'index :<\/h2>\n\n\n\n<p>Voici un exemple de langage de d\u00e9finition de donn\u00e9es (DDL) permettant de cr\u00e9er le fichier <code>commandes<\/code> et comment cr\u00e9er un index sur cette table (si n\u00e9cessaire). <\/p>\n\n\n\n<p>Il convient de noter que <strong>index de stockage<\/strong> dans Exadata ne sont pas explicitement cr\u00e9\u00e9es par un administrateur de bases de donn\u00e9es. <\/p>\n\n\n\n<p>Ils sont g\u00e9r\u00e9s automatiquement par le logiciel de stockage d'Exadata en fonction des donn\u00e9es auxquelles on acc\u00e8de. <\/p>\n\n\n\n<p>Cependant, je montrerai \u00e9galement comment vous devriez cr\u00e9er un index si vous avez affaire \u00e0 un environnement non Exadata.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"example-ddl-for-the-orders-table\">Exemple de DDL pour le <code>commandes<\/code> Tableau<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nCREATE TABLE orders (\n    order_id       NUMBER PRIMARY KEY,\n    order_date     DATE,\n    customer_id    NUMBER,\n    total_amount   NUMBER(10, 2)\n);\n<\/pre><\/div>\n\n\n<p>Cela permet de cr\u00e9er une base <code>commandes<\/code> table avec un <code>cl\u00e9 primaire<\/code> sur <code>order_id<\/code>. <\/p>\n\n\n\n<p>Le <code>date_de_la_commande<\/code> est celle qui est impliqu\u00e9e dans le filtrage de la requ\u00eate pour l'exemple.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"note-on-storage-indexes-in-exadata\">Note sur les index de stockage dans Exadata<\/h3>\n\n\n\n<p>En <strong>Exadata<\/strong>, vous <strong>ne pas cr\u00e9er manuellement des index de stockage<\/strong>. <\/p>\n\n\n\n<p>Exadata les g\u00e8re automatiquement en m\u00e9moire en fonction des requ\u00eates qui acc\u00e8dent fr\u00e9quemment \u00e0 certaines colonnes. <\/p>\n\n\n\n<p>Vous ne pouvez pas contr\u00f4ler la cr\u00e9ation de l'index de stockage comme vous le faites avec les index traditionnels (par exemple, B-tree ou bitmap).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"example-of-traditional-index-creation-if-using-a-non-exadata-system\">Exemple de cr\u00e9ation d'un index traditionnel (en cas d'utilisation d'un syst\u00e8me sans exadonn\u00e9es)<\/h3>\n\n\n\n<p>Si vous voulez cr\u00e9er un index B-tree traditionnel sur <code>date_de_la_commande<\/code>vous \u00e9cririez quelque chose comme ceci :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nCREATE INDEX idx_order_date \nON orders (order_date);\n<\/pre><\/div>\n\n\n<p>Cet index traditionnel permet d'optimiser les requ\u00eates qui filtrent sur le <code>date_de_la_commande<\/code>mais son fonctionnement est diff\u00e9rent de celui du <strong>index de stockage<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"how-storage-indexes-work-in-exadata\">Comment fonctionnent les index de stockage dans Exadata<\/h3>\n\n\n\n<p>Avec Exadata, il n'est pas n\u00e9cessaire de cr\u00e9er un index explicite sur <code>date_de_la_commande<\/code> pour b\u00e9n\u00e9ficier des index de stockage. <\/p>\n\n\n\n<p>Le syst\u00e8me Exadata cr\u00e9e et utilise de mani\u00e8re dynamique <strong>index de stockage<\/strong> au niveau de l'\u00e9l\u00e9ment de stockage lorsqu'il d\u00e9tecte qu'une certaine colonne (comme <code>date_de_la_commande<\/code>) est fr\u00e9quemment interrog\u00e9. <\/p>\n\n\n\n<p>Il suit les valeurs minimales et maximales de chaque bloc de stockage, ce qui permet au syst\u00e8me d'ignorer les blocs non pertinents lors d'une requ\u00eate.<\/p>\n\n\n\n<p>En r\u00e9sum\u00e9 :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Indice traditionnel<\/strong>: Vous le cr\u00e9ez manuellement (comme indiqu\u00e9 dans l'exemple ci-dessus).<\/li>\n\n\n\n<li><strong>Index de stockage<\/strong> (Exadata) : G\u00e9r\u00e9 automatiquement par le syst\u00e8me, aucun DDL n'est requis.<\/li>\n<\/ul>\n\n\n\n<p>Si vous ex\u00e9cutez votre base de donn\u00e9es sur une machine Exadata, il vous suffit d'ex\u00e9cuter vos requ\u00eates, et Exadata utilisera automatiquement les index de stockage pour les optimiser en fonction des mod\u00e8les de requ\u00eates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-check-if-a-storage-index-has-been-used\">Comment v\u00e9rifier si un index de stockage a \u00e9t\u00e9 utilis\u00e9 ?<\/h2>\n\n\n\n<p>Dans Oracle Exadata, les index de stockage sont g\u00e9r\u00e9s automatiquement par le syst\u00e8me, mais vous pouvez surveiller et v\u00e9rifier si les index de stockage sont utilis\u00e9s pendant l'ex\u00e9cution de la requ\u00eate \u00e0 l'aide de divers outils et vues de surveillance.<\/p>\n\n\n\n<p>Voici quelques moyens de v\u00e9rifier si un index de stockage a \u00e9t\u00e9 cr\u00e9\u00e9 ou utilis\u00e9 pendant l'ex\u00e9cution de la requ\u00eate :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-v-sesstat-view\">1. <strong>V$SESSTAT Voir<\/strong><\/h3>\n\n\n\n<p>Vous pouvez v\u00e9rifier les statistiques d'utilisation de l'index de stockage par session \u00e0 l'aide de la commande <code>V$SESSTAT<\/code> qui contient des statistiques au niveau de la session. <\/p>\n\n\n\n<p>Plus pr\u00e9cis\u00e9ment, la statistique <code>octets d'E\/S physiques de la cellule sauvegard\u00e9s par l'index de stockage<\/code> indique si des index de stockage ont \u00e9t\u00e9 utilis\u00e9s.<\/p>\n\n\n\n<p>Voici une requ\u00eate que vous pouvez utiliser pour v\u00e9rifier si les index de stockage ont \u00e9t\u00e9 utilis\u00e9s par une session particuli\u00e8re :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT s.sid, \n       s.value AS &quot;Bytes Saved by Storage Index&quot;\nFROM v$sesstat s\nJOIN v$statname n ON s.statistic# = n.statistic#\nWHERE n.name = &#039;cell physical IO bytes saved by storage index&#039;;\n<\/pre><\/div>\n\n\n<p>Si la requ\u00eate renvoie une valeur positive dans le champ <code>Octets sauvegard\u00e9s par l'index de stockage<\/code> indique que des index de stockage ont \u00e9t\u00e9 utilis\u00e9s lors de l'ex\u00e9cution de la requ\u00eate pour cette session.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-exadata-specific-wait-events\">2. <strong>\u00c9v\u00e9nements d'attente sp\u00e9cifiques \u00e0 Exadata<\/strong><\/h3>\n\n\n\n<p>Un autre indicateur de l'utilisation de l'index de stockage est la r\u00e9duction des \u00e9v\u00e9nements d'attente li\u00e9s aux entr\u00e9es\/sorties. <\/p>\n\n\n\n<p>Vous pouvez surveiller des \u00e9v\u00e9nements d'attente sp\u00e9cifiques dans Exadata, tels que<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>cell smart table scan<\/code><\/li>\n\n\n\n<li><code>balayage de l'index intelligent de la cellule<\/code><\/li>\n<\/ul>\n\n\n\n<p>Ces \u00e9v\u00e9nements indiquent que des analyses intelligentes sont en cours et que, par extension, les index de stockage peuvent avoir \u00e9t\u00e9 impliqu\u00e9s dans la r\u00e9duction des donn\u00e9es \u00e0 analyser.<\/p>\n\n\n\n<p>Pour v\u00e9rifier les \u00e9v\u00e9nements d'attente sp\u00e9cifiques \u00e0 Exadata :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT event, total_waits, time_waited\nFROM v$session_event\nWHERE event LIKE &#039;cell smart%&#039;;\n<\/pre><\/div>\n\n\n<p>Un nombre \u00e9lev\u00e9 d'attentes pour les <code>cell smart table scan<\/code> peut indiquer que des index de stockage ont \u00e9t\u00e9 utilis\u00e9s pour ignorer des donn\u00e9es non pertinentes au cours de l'analyse.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-cell-cli-command-on-the-storage-cells\">3. <strong>Commande CellCLI (sur les cellules de stockage)<\/strong><\/h3>\n\n\n\n<p>Si vous avez acc\u00e8s aux cellules de stockage elles-m\u00eames, vous pouvez utiliser la fonction <strong>CellCLI<\/strong> (Cell Command-Line Interface) pour surveiller et analyser les performances des cellules de stockage. Il s'agit notamment de v\u00e9rifier si les index de stockage sont utilis\u00e9s.<\/p>\n\n\n\n<p>Pour r\u00e9pertorier les statistiques actuelles des index de stockage sur une cellule de stockage, vous pouvez ex\u00e9cuter l'op\u00e9ration suivante <strong>CellCLI<\/strong> commande :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nCellCLI&gt; list metriccurrent where objectType = &#039;CELLIODATA&#039; and name = &#039;DB_IO_BY_STORIDX&#039;\n<\/pre><\/div>\n\n\n<p>Cela permet d'afficher les mesures relatives \u00e0 l'utilisation de l'index de stockage sur cette cellule de stockage particuli\u00e8re. <\/p>\n\n\n\n<p>Rechercher des valeurs dans le <code>DB_IO_BY_STORIDX<\/code> qui indique la quantit\u00e9 de donn\u00e9es \u00e9conomis\u00e9es gr\u00e2ce \u00e0 l'utilisation d'index de stockage.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-sql-monitoring-report\">4. <strong>Rapport de surveillance SQL<\/strong><\/h3>\n\n\n\n<p>Lorsqu'une requ\u00eate \u00e9ligible au Smart Scan (et potentiellement \u00e0 l'utilisation d'index de stockage) est ex\u00e9cut\u00e9e, vous pouvez g\u00e9n\u00e9rer un fichier <strong>Rapport de surveillance SQL<\/strong> pour obtenir des informations d\u00e9taill\u00e9es sur l'ex\u00e9cution. <\/p>\n\n\n\n<p>Le rapport de surveillance SQL vous indiquera<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si Smart Scan a \u00e9t\u00e9 utilis\u00e9.<\/li>\n\n\n\n<li>La quantit\u00e9 de donn\u00e9es filtr\u00e9es \u00e0 l'aide des index de stockage.<\/li>\n<\/ul>\n\n\n\n<p>Pour g\u00e9n\u00e9rer le rapport de surveillance SQL, vous pouvez utiliser la commande SQL suivante :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT dbms_sqltune.report_sql_monitor(sql_id =&gt; &#039;your_sql_id&#039;) \nFROM dual;\n<\/pre><\/div>\n\n\n<p>Ce rapport permettra de savoir si les index de stockage ont \u00e9t\u00e9 utilis\u00e9s, en examinant la r\u00e9duction des donn\u00e9es trait\u00e9es lors des balayages intelligents.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5-dba-hist-sysstat-view-historical-monitoring\">5. <strong>Vue DBA_HIST_SYSSTAT (surveillance historique)<\/strong><\/h3>\n\n\n\n<p>Pour v\u00e9rifier l'utilisation historique des index de stockage au fil du temps, vous pouvez interroger la base de donn\u00e9es <code>DBA_HIST_SYSSTAT<\/code> qui enregistre les statistiques de l'ensemble du syst\u00e8me sur une p\u00e9riode donn\u00e9e.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT s.snap_id,\n       s.instance_number,\n       ss.value AS &quot;Storage Index IO Bytes Saved&quot;\nFROM dba_hist_sysstat ss\nJOIN dba_hist_snapshot s ON ss.snap_id = s.snap_id\nWHERE ss.stat_name = &#039;cell physical IO bytes saved by storage index&#039;;\n<\/pre><\/div>\n\n\n<p>Cette requ\u00eate donnera un aper\u00e7u du nombre d'octets d'E\/S physiques \u00e9conomis\u00e9s par les index de stockage au fil du temps, tel qu'enregistr\u00e9 dans les instantan\u00e9s AWR (Automatic Workload Repository).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"summary\">R\u00e9sum\u00e9<\/h3>\n\n\n\n<p>Vous ne pouvez pas cr\u00e9er manuellement des index de stockage dans Exadata, mais vous pouvez surveiller et v\u00e9rifier leur utilisation :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>V\u00e9rification des statistiques au niveau de la session (<code>V$SESSTAT<\/code>).<\/li>\n\n\n\n<li>Analyse des \u00e9v\u00e9nements d'attente Exadata (<code>cell smart table scan<\/code>).<\/li>\n\n\n\n<li>Utilisation des commandes CellCLI sur les cellules de stockage.<\/li>\n\n\n\n<li>G\u00e9n\u00e9ration de rapports de surveillance SQL.<\/li>\n\n\n\n<li>L'examen des statistiques historiques du syst\u00e8me (<code>DBA_HIST_SYSSTAT<\/code>).<\/li>\n<\/ol>\n\n\n\n<p>Ces outils vous permettront de voir si et quand les index de stockage ont \u00e9t\u00e9 cr\u00e9\u00e9s et utilis\u00e9s pour am\u00e9liorer les performances des requ\u00eates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dont-you-need-to-create-indexes-in-exadata\">Faut-il cr\u00e9er des index dans Exadata ?<\/h2>\n\n\n\n<p>Pas n\u00e9cessairement. <\/p>\n\n\n\n<p>Tandis que <strong>index de stockage<\/strong> dans Exadata sont automatiquement g\u00e9r\u00e9es et cr\u00e9\u00e9es dynamiquement par le syst\u00e8me afin d'optimiser les performances, <strong>indices traditionnels<\/strong> (comme les index B-tree ou bitmap) peuvent encore \u00eatre b\u00e9n\u00e9fiques dans certains cas. <\/p>\n\n\n\n<p>Voici une explication des cas o\u00f9 il est n\u00e9cessaire ou non de cr\u00e9er des index traditionnels sur Exadata :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-when-storage-indexes-are-sufficient\">1. <strong>Quand les index de stockage suffisent<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Acc\u00e8s s\u00e9quentiel aux donn\u00e9es<\/strong>: Si la plupart de vos requ\u00eates impliquent le balayage s\u00e9quentiel de grandes quantit\u00e9s de donn\u00e9es (par exemple, les requ\u00eates d'entrep\u00f4t de donn\u00e9es avec balayage complet des tables), la fonction <strong>Scanners intelligents<\/strong> et <strong>index de stockage<\/strong> peut \u00eatre extr\u00eamement efficace pour r\u00e9duire les E\/S et am\u00e9liorer les performances.<\/li>\n\n\n\n<li><strong>Interrogations sur les plages<\/strong>: Pour les requ\u00eates portant sur des plages (comme les plages de dates), les index de stockage peuvent permettre d'ignorer les blocs non pertinents et de minimiser les E\/S disque sans avoir besoin d'index traditionnels.<\/li>\n\n\n\n<li><strong>Nature dynamique<\/strong>: Les index de stockage sont cr\u00e9\u00e9s et maintenus dynamiquement en m\u00e9moire, ce qui signifie qu'ils peuvent s'adapter aux mod\u00e8les de charge de travail sans n\u00e9cessiter l'intervention d'un administrateur de bases de donn\u00e9es.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-when-traditional-indexes-are-still-needed\">2. <strong>Quand les index traditionnels sont encore n\u00e9cessaires<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Charges de travail OLTP (Online Transaction Processing)<\/strong>: En <strong>Environnements OLTP<\/strong>o\u00f9 les requ\u00eates acc\u00e8dent souvent \u00e0 des lignes individuelles ou \u00e0 de petits ensembles de donn\u00e9es (par exemple, la recherche d'un client par son num\u00e9ro d'identification), les syst\u00e8mes traditionnels d <strong>Index B-tree<\/strong> peut encore s'av\u00e9rer n\u00e9cessaire. <br>Les index de stockage d'Exadata sont les plus efficaces pour r\u00e9duire les E\/S pendant les balayages complets, mais ils ne sont pas utilis\u00e9s pour les recherches sur une seule rang\u00e9e.<\/li>\n\n\n\n<li><strong>Conditions d'adh\u00e9sion<\/strong>: Si vos requ\u00eates impliquent des jointures sur des colonnes \u00e0 cl\u00e9 non primaire, les index traditionnels (par exemple, un index B-tree ou bitmap) peuvent contribuer \u00e0 am\u00e9liorer les performances des jointures en r\u00e9duisant le nombre de lignes analys\u00e9es.<\/li>\n\n\n\n<li><strong>Mises \u00e0 jour des donn\u00e9es<\/strong>: Dans les environnements o\u00f9 les <strong>met \u00e0 jour ou supprime<\/strong>Les index traditionnels peuvent contribuer \u00e0 garantir un acc\u00e8s efficace aux lignes et des op\u00e9rations de maintenance.<\/li>\n\n\n\n<li><strong>Requ\u00eates Smart Scan non \u00e9ligibles<\/strong>: Toutes les requ\u00eates ne peuvent pas utiliser Smart Scan (par exemple, les requ\u00eates portant sur de petites tables ou celles impliquant des op\u00e9rateurs complexes). <br>Pour ces requ\u00eates, les index traditionnels peuvent encore \u00eatre utiles.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-special-cases-where-you-may-still-want-traditional-indexes\">3. <strong>Cas particuliers pour lesquels vous pouvez encore avoir besoin d'index traditionnels<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Contraintes uniques<\/strong>: La cr\u00e9ation d'index sur les colonnes avec des contraintes uniques (par exemple, cl\u00e9s uniques, cl\u00e9s primaires) est toujours n\u00e9cessaire pour assurer l'int\u00e9grit\u00e9 des donn\u00e9es.<\/li>\n\n\n\n<li><strong>Relations cl\u00e9s avec l'\u00e9tranger<\/strong>: Les index sur les cl\u00e9s \u00e9trang\u00e8res peuvent toujours \u00eatre utiles pour \u00e9viter les balayages complets de la table lors des mises \u00e0 jour ou des suppressions sur les tables parentes.<\/li>\n\n\n\n<li><strong>Syst\u00e8mes sans exadonn\u00e9es<\/strong>: Si vous avez des environnements mixtes dans lesquels les donn\u00e9es peuvent \u00eatre consult\u00e9es \u00e0 la fois sur des syst\u00e8mes Exadata et non Exadata, les index traditionnels peuvent encore \u00eatre n\u00e9cessaires pour optimiser les performances sur les plates-formes non Exadata.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-mixed-workloads\">4. <strong>Charges de travail mixtes<\/strong><\/h3>\n\n\n\n<p>Pour les syst\u00e8mes qui ont <strong>charges de travail mixtes<\/strong> (une combinaison d'OLTP et de reporting), les index traditionnels peuvent compl\u00e9ter les index de stockage d'Exadata. <\/p>\n\n\n\n<p>Par exemple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Charges de travail OLTP<\/strong> b\u00e9n\u00e9ficier des index traditionnels pour une recherche rapide des lignes.<\/li>\n\n\n\n<li><strong>Requ\u00eates analytiques<\/strong> b\u00e9n\u00e9ficier des index de stockage d'Exadata pour des analyses efficaces \u00e0 grande \u00e9chelle.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"conclusion\">Conclusion :<\/h3>\n\n\n\n<p>Tandis que <strong>index de stockage<\/strong> peuvent r\u00e9duire le besoin d'index traditionnels dans Exadata, ils ne les remplacent pas compl\u00e8tement. Vous devez toujours envisager de cr\u00e9er des <strong>indices traditionnels<\/strong> pour :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>environnements OLTP ou charges de travail mixtes.<\/li>\n\n\n\n<li>Requ\u00eates n\u00e9cessitant des recherches pr\u00e9cises sur les lignes.<\/li>\n\n\n\n<li>Renforcer les contraintes d'unicit\u00e9 et les relations de cl\u00e9s \u00e9trang\u00e8res.<\/li>\n<\/ul>\n\n\n\n<p>Dans un environnement d'entrep\u00f4t de donn\u00e9es o\u00f9 les balayages complets de tables sont courants, les index de stockage, combin\u00e9s \u00e0 Smart Scan et aux optimisations d'Exadata, peuvent r\u00e9duire consid\u00e9rablement le besoin d'indexation traditionnelle. <\/p>\n\n\n\n<p>Toutefois, pour les charges de travail OLTP ou les cas impliquant des requ\u00eates s\u00e9lectives ou des conditions de jointure, les index traditionnels peuvent encore \u00eatre essentiels pour des performances optimales.<\/p>","protected":false},"excerpt":{"rendered":"<p>Les index de stockage sont une fonctionnalit\u00e9 d'Exadata con\u00e7ue pour am\u00e9liorer les performances en r\u00e9duisant les entr\u00e9es\/sorties sur disque. Contrairement aux index B-tree ou bitmap traditionnels, les index de stockage ne stockent pas de valeurs sp\u00e9cifiques pour aider \u00e0 trouver les enregistrements ; au lieu de cela, ils suivent les valeurs minimales, maximales et nulles des donn\u00e9es dans des blocs de stockage de 1 Mo. Voici comment ils fonctionnent :<\/p>","protected":false},"author":1,"featured_media":6318,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_focus_keyword":"exadata storage index","rank_math_title":"","rank_math_description":"Improve query performance with Exadata Storage Index. Accelerate data access and optimize database operations. Get the details here!","rank_math_robots":"","rank_math_og_title":"","rank_math_og_description":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[116],"tags":[117,114],"class_list":["post-6308","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-exadata","tag-exadata-features","tag-storage-index"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/rootfan.com\/wp-content\/uploads\/pexels-photo-355747-1.jpeg?fit=1880%2C1022&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/posts\/6308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/comments?post=6308"}],"version-history":[{"count":14,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/posts\/6308\/revisions"}],"predecessor-version":[{"id":6418,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/posts\/6308\/revisions\/6418"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/media\/6318"}],"wp:attachment":[{"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/media?parent=6308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/categories?post=6308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rootfan.com\/fr\/wp-json\/wp\/v2\/tags?post=6308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}