{"id":20922,"date":"2026-08-23T11:49:04","date_gmt":"2026-08-23T09:49:04","guid":{"rendered":"https:\/\/webhosting.de\/mariadb-adaptive-hash-index-vorteile-nachteile-tuning-datenbank\/"},"modified":"2026-08-23T11:49:04","modified_gmt":"2026-08-23T09:49:04","slug":"mariadb-index-de-hachage-adaptatif-avantages-inconvenients-optimisation-de-la-base-de-donnees","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/mariadb-adaptive-hash-index-vorteile-nachteile-tuning-datenbank\/","title":{"rendered":"Index de hachage adaptatif MariaDB : avantages et inconv\u00e9nients pour les strat\u00e9gies modernes d'optimisation d'InnoDB"},"content":{"rendered":"<p>L'index adaptatif (AHI) de MariaDB peut acc\u00e9l\u00e9rer sensiblement les requ\u00eates d'\u00e9galit\u00e9 pr\u00e9cises, mais g\u00e9n\u00e8re des temps d'attente suppl\u00e9mentaires au niveau des verrous et des besoins en m\u00e9moire accrus en cas de parall\u00e9lisme \u00e9lev\u00e9. Je vais expliquer clairement quand l'AHI <strong>Tempo<\/strong> explique o\u00f9 elle g\u00e9n\u00e8re de la latence et comment j'int\u00e8gre cette fonction de mani\u00e8re cibl\u00e9e dans les strat\u00e9gies modernes d'optimisation d'InnoDB.<\/p>\n\n<h2>Points centraux<\/h2>\n<ul>\n  <li><strong>Fonctionnement<\/strong>: AHI compl\u00e8te les arbres B en permettant des recherches rapides par hachage en m\u00e9moire.<\/li>\n  <li><strong>Avantages<\/strong>: Requ\u00eates ponctuelles plus rapides, moins de charge sur le processeur, d\u00e9bit plus \u00e9lev\u00e9.<\/li>\n  <li><strong>Inconv\u00e9nients<\/strong>: conflits de verrouillage, consommation de m\u00e9moire, DDL plus lentes.<\/li>\n  <li><strong>Tuning<\/strong>: partitionnement, contr\u00f4le au niveau de chaque table, surveillance efficace.<\/li>\n  <li><strong>D\u00e9cision<\/strong>: tests A\/B, profil de charge de travail, activation cibl\u00e9e.<\/li>\n<\/ul>\n\n<h2>Le r\u00f4le pr\u00e9cis de l'index adaptatif (Adaptive Hash Index) dans InnoDB<\/h2>\n<p>InnoDB traite les requ\u00eates classiques \u00e0 l'aide d'arbres B, tandis qu'AHI effectue en plus un hachage des cl\u00e9s fr\u00e9quemment utilis\u00e9es en m\u00e9moire, permettant ainsi des recherches directes en O(1). Cette approche contourne plusieurs niveaux d'arborescence et r\u00e9duit consid\u00e9rablement le temps CPU par recherche, \u00e0 condition que la requ\u00eate corresponde exactement \u00e0 un motif d'\u00e9galit\u00e9. J'\u00e9value la <strong>Taux de r\u00e9ussite<\/strong> les recherches dans le hachage, car seules les cl\u00e9s fr\u00e9quemment utilis\u00e9es offrent un r\u00e9el avantage. AHI reste transparent pour les applications ; je n'ai donc pas besoin de d\u00e9finir d'index de hachage suppl\u00e9mentaire. Ce qui est d\u00e9terminant, c\u2019est qu\u2019InnoDB construit et d\u00e9mant\u00e8le le hachage de mani\u00e8re dynamique, ce qui fait que l\u2019efficacit\u00e9 d\u00e9pend enti\u00e8rement des mod\u00e8les d\u2019acc\u00e8s r\u00e9els. Pour mieux comprendre ce principe, il est utile de jeter un \u0153il \u00e0 <a href=\"https:\/\/webhosting.de\/fr\/mysql-moteur-de-stockage-innodb-myisam-hebergement-web-serverflux\/\">InnoDB vs MyISAM<\/a>, car l'AHI s'attache sp\u00e9cifiquement aux forces et aux faiblesses des acc\u00e8s bas\u00e9s sur l'arborescence.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb-buero-tuning-4923.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Avantages au quotidien : quand l'AHI permet de gagner du temps<\/h2>\n<p>J'aime bien activer AHI pour les charges de travail OLTP comportant de nombreuses recherches r\u00e9p\u00e9t\u00e9es de cl\u00e9s primaires ou de contraintes d'unicit\u00e9, car l'acc\u00e8s direct au hachage r\u00e9duit la latence par requ\u00eate. La travers\u00e9e de l'arbre B est totalement supprim\u00e9e en cas de correspondance, ce qui permet au moteur de r\u00e9duire le nombre d'acc\u00e8s \u00e0 la m\u00e9moire et d'optimiser la <strong>Charge CPU<\/strong> diminue. Cela s'av\u00e8re particuli\u00e8rement avantageux dans les applications utilisant des donn\u00e9es de session ou de configuration, car les m\u00eames cl\u00e9s reviennent tr\u00e8s souvent. La charge de lecture domine dans ce cas, les modifications restent mod\u00e9r\u00e9es et AHI doit ajuster la structure de hachage moins souvent. Dans de tels environnements, j'observe souvent une r\u00e9partition plus homog\u00e8ne des temps de r\u00e9ponse, notamment pour les requ\u00eates SELECT courtes et les plus fr\u00e9quentes. Plus le mod\u00e8le de requ\u00eates est stable, plus l'utilit\u00e9 pratique par entr\u00e9e de hachage est \u00e9lev\u00e9e.<\/p>\n\n<h2>Risques et effets secondaires : les freins de l'AHI<\/h2>\n<p>Si le parall\u00e9lisme augmente fortement, les threads se disputent les verrous de hachage et g\u00e9n\u00e8rent des temps d'attente perceptibles. Dans ces situations, l'avantage initial en termes de vitesse s'inverse, car la synchronisation suppl\u00e9mentaire <strong>Latence P99<\/strong> et limite le d\u00e9bit. Les charges de travail \u00e0 forte intensit\u00e9 d'\u00e9criture aggravent cet effet, car de nombreuses mises \u00e0 jour invalident les entr\u00e9es de hachage et entra\u00eenent des co\u00fbts de maintenance constants. En revanche, les balayages de plages ou les recherches par caract\u00e8res g\u00e9n\u00e9riques n'en tirent gu\u00e8re profit, car l'approche par hachage n'est pas con\u00e7ue \u00e0 cet effet. Quiconque active cette fonctionnalit\u00e9 de mani\u00e8re g\u00e9n\u00e9rale sans effectuer de mesures risque de voir l\u2019AHI faire varier les temps de r\u00e9ponse et d\u2019allonger sensiblement la dur\u00e9e d\u2019ex\u00e9cution des t\u00e2ches DDL importantes.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb_ahn_vorteile_nachteile_8391.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Stockage et partitionnement : les bons r\u00e9glages<\/h2>\n<p>AHI occupe de la m\u00e9moire dans le pool de tampons, g\u00e9n\u00e9ralement via une structure de hachage interne qui s'agrandit avec le temps. Je consid\u00e8re que la <strong>Pool de m\u00e9moire tampon<\/strong>- Je surveille l'utilisation, car une part trop importante du hachage \u00e9vince les donn\u00e9es utiles et favorise les \u00e9checs de pagination. Pour accro\u00eetre le parall\u00e9lisme, je divise le hachage en plusieurs partitions, de sorte que moins de threads acc\u00e8dent au m\u00eame verrou. J\u2019augmente progressivement le nombre de partitions et j\u2019\u00e9value l\u2019effet sur les temps d\u2019attente des verrous et le d\u00e9bit. Fixer un nombre maximal forfaitaire apporte rarement des avantages ; ce sont les mesures obtenues qui guident mon prochain ajustement. Pour garder une vue d\u2019ensemble, je note les modifications et je les mets en corr\u00e9lation avec l\u2019\u00e9volution de la latence.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>Cat\u00e9gorie<\/th>\n      <th>Quand l'AHI peut-il vous aider ?<\/th>\n      <th>Quand l'AHI est-il nocif ?<\/th>\n      <th>Remarque concernant le tuning<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Type de requ\u00eate<\/td>\n      <td>SELECT sur des colonnes fr\u00e9quentes<\/td>\n      <td>Recherches par plage, LIKE \u201a %\u2026% \u2018<\/td>\n      <td>V\u00e9rifier les mod\u00e8les de filtrage, contr\u00f4ler les correspondances de hachage<\/td>\n    <\/tr>\n    <tr>\n      <td>profil de charge<\/td>\n      <td>Charge OLTP \u00e0 forte intensit\u00e9 de lecture<\/td>\n      <td>Syst\u00e8mes \u00e0 forte intensit\u00e9 d'\u00e9criture<\/td>\n      <td>Utiliser l'AHI avec prudence en cas de fr\u00e9quence de mise \u00e0 jour \u00e9lev\u00e9e<\/td>\n    <\/tr>\n    <tr>\n      <td>Parall\u00e9lisme<\/td>\n      <td>Nombre de fils moyen<\/td>\n      <td>De nombreux threads pr\u00e9sentant des conflits d'acc\u00e8s aux verrous<\/td>\n      <td>Augmenter progressivement les partitions<\/td>\n    <\/tr>\n    <tr>\n      <td>M\u00e9moire<\/td>\n      <td>Grand pool de tampons<\/td>\n      <td>Remplacement des pages actives<\/td>\n      <td>Surveiller la part de hash<\/td>\n    <\/tr>\n    <tr>\n      <td>Entretien<\/td>\n      <td>Peu d'interventions DDL<\/td>\n      <td>Utilisation fr\u00e9quente des commandes DROP\/ALTER\/TRUNCATE<\/td>\n      <td>D\u00e9sactiver temporairement l'AHI avant les DDL importants<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Suivi et indicateurs : ce que je v\u00e9rifie r\u00e9guli\u00e8rement<\/h2>\n<p>Je commence chaque prise de d\u00e9cision concernant l'AHI par l'analyse des m\u00e9triques relatives aux recherches de hachage, aux taux de r\u00e9ussite et aux temps d'attente des latches. J'analyse \u00e9galement les latences P95\/P99, car en cas de concurrence \u00e9lev\u00e9e, les valeurs aberrantes ont un impact plus important sur la perception de l'utilisateur que les valeurs moyennes. Je mets la taille du hachage en relation avec la <strong>Pool de m\u00e9moire tampon<\/strong>- Je surveille l'utilisation des pages et v\u00e9rifie si le taux d'acc\u00e8s aux pages et les mod\u00e8les d'E\/S en sont affect\u00e9s. Les dur\u00e9es d'ex\u00e9cution des requ\u00eates DDL sont \u00e9galement consign\u00e9es dans le journal, ce qui me permet de d\u00e9tecter rapidement les effets n\u00e9gatifs li\u00e9s aux modifications de sch\u00e9ma. En cas de d\u00e9t\u00e9rioration notable, je d\u00e9sactive AHI \u00e0 titre d\u2019essai, je r\u00e9p\u00e8te la mesure et j\u2019\u00e9value la diff\u00e9rence. Je d\u00e9cide ensuite si je d\u00e9sactive la fonction globalement ou si je ne l\u2019active que de mani\u00e8re cibl\u00e9e pour les tables concern\u00e9es.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb-hash-index-tuning-8365.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Op\u00e9rations DDL et maintenance : pi\u00e8ges courants<\/h2>\n<p>Les commandes DROP, TRUNCATE, ALTER ou DROP INDEX n\u00e9cessitent la suppression des entr\u00e9es de hachage associ\u00e9es, ce qui g\u00e9n\u00e8re une charge de travail suppl\u00e9mentaire. Plus la table est volumineuse et active, plus ce nettoyage des structures internes prend du temps. C'est pourquoi je pr\u00e9vois les modifications importantes du sch\u00e9ma pendant les fen\u00eatres de maintenance et je v\u00e9rifie les <strong>Dur\u00e9e d'ex\u00e9cution du DDL<\/strong> au pr\u00e9alable sur un instantan\u00e9 de test. Si l'impact s'av\u00e8re trop important, je d\u00e9sactive temporairement l'AHI afin d'\u00e9viter de longues p\u00e9riodes d'indisponibilit\u00e9 en production. Je r\u00e9active ensuite la fonction, \u00e0 condition que la charge de travail continue de l'exploiter de mani\u00e8re pertinente. Cette approche garantit la pr\u00e9visibilit\u00e9 des modifications apport\u00e9es au mod\u00e8le de donn\u00e9es.<\/p>\n\n<h2>Contr\u00f4le par table et versions r\u00e9centes de MariaDB<\/h2>\n<p>Les versions r\u00e9centes de MariaDB permettent d\u2019activer ou de d\u00e9sactiver AHI de mani\u00e8re cibl\u00e9e, plut\u00f4t que d\u2019opter pour une approche globale. J\u2019active cette fonctionnalit\u00e9 sp\u00e9cifiquement pour les tables comportant de nombreuses requ\u00eates d\u2019\u00e9galit\u00e9 et je la d\u00e9sactive en cas de forte charge d\u2019\u00e9criture ou de DDL fr\u00e9quentes. Cela me permet de limiter les risques sans renoncer aux avantages li\u00e9s \u00e0 <strong>Recherches ponctuelles<\/strong> d'y renoncer. De plus, j'utilise des informations d'\u00e9tat avanc\u00e9es pour \u00e9valuer avec pr\u00e9cision l'impact du hachage par table. Cela permet de d\u00e9limiter pr\u00e9cis\u00e9ment le champ d'application de l'AHI et de d\u00e9finir le profil de performances de mani\u00e8re contr\u00f4l\u00e9e. C'est notamment dans les charges de travail mixtes que ce r\u00e9glage fin porte clairement ses fruits.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb_innodb_tuning_4321.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Sc\u00e9narios pratiques : pertinents ou probl\u00e9matiques ?<\/h2>\n<p>J'utilise AHI lorsque des applications OLTP ex\u00e9cutent de nombreuses requ\u00eates SELECT identiques sur des cl\u00e9s primaires et que les donn\u00e9es restent relativement stables. Les mod\u00e8les d'acc\u00e8s de type \u00ab cl\u00e9-valeur \u00bb en tirent souvent profit, \u00e0 condition que des conditions d'\u00e9galit\u00e9 uniformes se r\u00e9p\u00e8tent r\u00e9guli\u00e8rement. L'AHI est en revanche moins adapt\u00e9 aux requ\u00eates de reporting comportant de vastes plages de donn\u00e9es, aux mod\u00e8les de mise \u00e0 jour hautement parall\u00e8les et aux interventions DDL r\u00e9currentes. Dans ces cas-l\u00e0, les temps d'attente li\u00e9s aux verrous, les co\u00fbts de maintenance et les retards DDL l'emportent sur le gain obtenu gr\u00e2ce aux correspondances de hachage. Si vous g\u00e9rez une charge mixte, utilisez l\u2019option \u00ab par table \u00bb et concentrez l\u2019AHI sur <strong>raccourcis clavier<\/strong>, qui fournissent des r\u00e9sultats fiables. Cette approche \u00e9vite que des motifs rares ne surchargent la structure de hachage et ne mobilisent de la m\u00e9moire.<\/p>\n\n<h2>Strat\u00e9gie de test : comparaison A\/B sans t\u00e2tonnements<\/h2>\n<p>Je travaille avec des fen\u00eatres de test bien d\u00e9finies, des ensembles de donn\u00e9es identiques et des profils de charge reproductibles afin de comparer de mani\u00e8re pr\u00e9cise les modes AHI ON et OFF. Je compare c\u00f4te \u00e0 c\u00f4te les indicateurs de d\u00e9bit, de latences P95\/P99 et d'attentes de verrouillage, et je recherche des tendances reproductibles. Les v\u00e9rifications structur\u00e9es du plan de requ\u00eates s\u2019av\u00e8rent utiles ; pour cela, j\u2019utilise en compl\u00e9ment <a href=\"https:\/\/webhosting.de\/fr\/mysql-optimizer-query-hosting-optimisation-serverboost\/\">Conseils sur l'optimiseur de requ\u00eates<\/a> j'utilise. Ce n'est que lorsque les r\u00e9sultats des mesures montrent des avantages constants que j'adopte d\u00e9finitivement ce param\u00e9trage. Si l'effet reste incertain, je d\u00e9sactive la fonction ou je la transf\u00e8re vers des tables individuelles. Je documente chaque modification avec <strong>P\u00e9riode de mesure<\/strong>, les param\u00e8tres et le profil de charge, afin de pouvoir comprendre plus tard pourquoi une option est activ\u00e9e.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb_index_vorteile_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>H\u00e9bergement et configuration du serveur : ce \u00e0 quoi je fais attention<\/h2>\n<p>Une m\u00e9moire vive importante et un grand nombre de c\u0153urs offrent une marge de man\u0153uvre pour les partitions AHI et une configuration g\u00e9n\u00e9reuse du pool de tampons. Je calibre la <strong>Tailles des pools de m\u00e9moire tampon<\/strong> avec soin, afin que la partie \u00ab hash \u00bb ne prenne pas le pas sur les donn\u00e9es utiles et que les op\u00e9rations d\u2019E\/S n\u2019augmentent pas inutilement. Les utilisateurs de MariaDB b\u00e9n\u00e9ficient des derni\u00e8res versions et d\u2019options permettant un r\u00e9glage pr\u00e9cis table par table. Pour le calibrage de la m\u00e9moire, j\u2019utilise volontiers des guides pratiques tels que <a href=\"https:\/\/webhosting.de\/fr\/guide-de-performance-sur-le-dimensionnement-du-pool-de-tampons-de-mariadb\/\">Tailles des pools de m\u00e9moire tampon<\/a>, car ce sont des valeurs fondamentales solides qui rendent possible le succ\u00e8s d'AHI. Sur des plateformes performantes, AHI s'adapte mieux, \u00e0 condition que les conflits d'acc\u00e8s aux verrous restent g\u00e9rables. \u00c0 l'inverse, une configuration trop limit\u00e9e r\u00e9duit imm\u00e9diatement \u00e0 n\u00e9ant les avantages escompt\u00e9s.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb-hash-index-8291.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>La configuration en pratique : param\u00e8tres et valeurs par d\u00e9faut s\u00e9curis\u00e9es<\/h2>\n<p>Dans la pratique, je commence par une approche prudente : j'active AHI au niveau global, je d\u00e9finis un nombre mod\u00e9r\u00e9 de partitions de hachage et j'observe le comportement sous une charge r\u00e9elle. Les param\u00e8tres importants sont l'activation\/la d\u00e9sactivation globale (<code>innodb_adaptive_hash_index<\/code>) ainsi que le partitionnement du hachage (g\u00e9n\u00e9ralement via <code>\u2026_pi\u00e8ces<\/code>(param\u00e8tre). Un nombre plus \u00e9lev\u00e9 de partitions r\u00e9duit les points chauds de verrouillage, mais augmente \u00e9galement la charge administrative. Je n'augmente le nombre de partitions que si les mesures r\u00e9v\u00e8lent clairement des conflits de verrouillage au niveau du hachage et si la r\u00e9serve de CPU est suffisante. Une approche \u00e9prouv\u00e9e consiste \u00e0 proc\u00e9der par petits incr\u00e9ments, suivis d\u2019un test de charge. L\u2019AHI peut \u00eatre activ\u00e9 ou d\u00e9sactiv\u00e9 \u00e0 la vol\u00e9e ; j\u2019en profite pour v\u00e9rifier l\u2019effet sans red\u00e9marrage. Important : apr\u00e8s la commutation, le moteur a besoin d\u2019un bref \u201e temps de pr\u00e9chauffage \u201c jusqu\u2019\u00e0 ce que des motifs fr\u00e9quents remplissent \u00e0 nouveau le hachage.<\/p>\n<p>J'\u00e9value \u00e9galement l'interaction avec d'autres param\u00e8tres InnoDB. Un pool de m\u00e9moire tampon trop petit limite l'int\u00e9r\u00eat du hachage, car les \u00e9victions de pages trop fr\u00e9quentes en annulent l'effet. \u00c0 l\u2019inverse, un buffer pool tr\u00e8s grand peut d\u00e9j\u00e0 \u00eatre suffisamment rapide m\u00eame sans AHI ; dans ce cas, l\u2019AHI n\u2019est utile que s\u2019il r\u00e9duit de mani\u00e8re mesurable le temps CPU par recherche. L\u2019objectif reste toujours le m\u00eame : une charge \u00e9quilibr\u00e9e entre le CPU, la m\u00e9moire et les E\/S, et non la maximisation de certains indicateurs isol\u00e9s.<\/p>\n\n<h2>Quels sont les mod\u00e8les d'acc\u00e8s qui d\u00e9clenchent r\u00e9ellement l'AHI ?<\/h2>\n<p>L'AHI acc\u00e9l\u00e8re principalement les comparaisons exactes sur les pr\u00e9fixes d'index. Parmi celles-ci, on peut citer :<\/p>\n<ul>\n  <li>Recherches par cl\u00e9 primaire et par valeur unique (<code>WHERE id = ?<\/code>)<\/li>\n  <li>\u00c9galit\u00e9s sur le pr\u00e9fixe gauche d'un index compos\u00e9 (<code>WHERE a = ? ET b = ?<\/code> pour Index(a, b, c)<\/li>\n  <li>Cl\u00e9s de jointure identiques et fr\u00e9quemment r\u00e9p\u00e9t\u00e9es dans les jointures OLTP<\/li>\n<\/ul>\n<p>Les \u00e9l\u00e9ments suivants sont moins adapt\u00e9s :<\/p>\n<ul>\n  <li>Requ\u00eates par domaine (<code>BETWEEN<\/code>, <code>&gt;<\/code>, <code>&lt;<\/code>)<\/li>\n  <li>Recherches par pr\u00e9fixe ou suffixe \u00e0 l'aide de caract\u00e8res g\u00e9n\u00e9riques (<code>LIKE ' %\u2026% '<\/code>)<\/li>\n  <li>Requ\u00eates qui filtrent sur des colonnes non s\u00e9lectives dont les valeurs sont tr\u00e8s dispers\u00e9es<\/li>\n<\/ul>\n<p>La coh\u00e9rence des mod\u00e8les est \u00e9galement importante : plus les m\u00eames cl\u00e9s reviennent souvent, plus elles ont de chances de b\u00e9n\u00e9ficier du hachage. Les cl\u00e9s al\u00e9atoires ou tr\u00e8s dispers\u00e9es fournissent trop peu de r\u00e9sultats pour justifier les co\u00fbts de maintenance. J'oriente donc la conception de l'index de mani\u00e8re \u00e0 ce que les correspondances fr\u00e9quentes soient couvertes par le pr\u00e9fixe gauche d'un index adapt\u00e9 ; l'AHI renforce alors ce plan, d\u00e9j\u00e0 efficace, au lieu de le remplacer.<\/p>\n\n<h2>Cycle de vie, pr\u00e9chauffage et red\u00e9marrages<\/h2>\n<p>L'AHI est une structure volatile en m\u00e9moire. Apr\u00e8s un red\u00e9marrage ou une modification de configuration, le hachage est vide et se remplit progressivement de trafic r\u00e9el. Au cours de cette phase, j'observe souvent une latence temporairement plus \u00e9lev\u00e9e, jusqu'\u00e0 ce que les cl\u00e9s les plus utilis\u00e9es se soient stabilis\u00e9es. Contrairement au vidage du pool de tampons, les donn\u00e9es AHI ne sont pas conserv\u00e9es ; un red\u00e9marrage planifi\u00e9 doit donc avoir lieu pendant des phases o\u00f9 la charge est ma\u00eetrisable. Ceux qui utilisent des fen\u00eatres de test tr\u00e8s courtes sous-estiment facilement cet effet de \u00ab warm-up \u00bb et prennent ainsi de mauvaises d\u00e9cisions ; je planifie donc toujours les p\u00e9riodes de mesure de mani\u00e8re \u00e0 ce que le hachage puisse se stabiliser.<\/p>\n\n<h2>Guide de d\u00e9pannage : sympt\u00f4mes et solutions<\/h2>\n<p>Les signes avant-coureurs typiques de probl\u00e8mes li\u00e9s \u00e0 l'AHI sont l'allongement des temps d'attente de verrouillage et la divergence des latences P95\/P99 en cas de charge maximale. Dans les sorties d'\u00e9tat (par exemple,. <code>AFFICHER L'\u00c9TAT DU MOTEUR INNODB<\/code>) Je m\u2019int\u00e9resse tout particuli\u00e8rement aux compteurs relatifs aux recherches par hachage et \u00e0 leur rapport avec les recherches dans les arbres B. Les indications concernant les verrous \u201e btr_search \u201c sugg\u00e8rent \u00e9galement une contention au niveau de l\u2019AHI. Je classe mes mesures correctives par ordre de priorit\u00e9 comme suit :<\/p>\n<ul>\n  <li>Augmenter l\u00e9g\u00e8rement la taille des partitions AHI et v\u00e9rifier l'impact sur les temps d'attente<\/li>\n  <li>D\u00e9sactiver le hachage \u00e0 court terme, mener une mesure A\/B, prendre une d\u00e9cision fond\u00e9e sur les donn\u00e9es<\/li>\n  <li>Optimiser la conception des index (pr\u00e9fixes plus s\u00e9lectifs, r\u00e9duction des requ\u00eates de plage inutiles)<\/li>\n  <li>D\u00e9coupler la charge d'\u00e9criture (traitement par lots, files d'attente d'\u00e9criture, r\u00e9partition des cl\u00e9s des points chauds)<\/li>\n  <li>Reporter les DDL volumineux \u00e0 une autre plage horaire ou d\u00e9sactiver temporairement l\u2019AHI<\/li>\n<\/ul>\n<p>En cas de probl\u00e8mes persistants dans les syst\u00e8mes \u00e0 forte charge d'\u00e9criture, je d\u00e9sactive souvent l'AHI de mani\u00e8re permanente ou je le limite de mani\u00e8re s\u00e9lective aux tables dont l'acc\u00e8s en lecture est stable. Le plus petit d\u00e9nominateur commun est le suivant : mesurer d'abord, d\u00e9cider ensuite.<\/p>\n\n<h2>Plan de d\u00e9ploiement : de la phase de test \u00e0 la mise en production<\/h2>\n<p>Au lieu de me concentrer aveugl\u00e9ment sur la production avec l'AHI, je travaille selon un plan par \u00e9tapes :<\/p>\n<ol>\n  <li>Recueillir le profil de charge de travail (requ\u00eates les plus fr\u00e9quentes, rapport lecture\/\u00e9criture, r\u00e9partition de la latence)<\/li>\n  <li>Mettre en place un syst\u00e8me de test avec des donn\u00e9es repr\u00e9sentatives et une configuration identique<\/li>\n  <li>Activer l'AHI, choisir des partitions de taille mod\u00e9r\u00e9e, effectuer des tests de charge avec des sc\u00e9narios reproductibles<\/li>\n  <li>Comparer les indicateurs (d\u00e9bit, P95\/P99, temps d'attente li\u00e9s aux verrous, taux de r\u00e9ussite du pool de tampons)<\/li>\n  <li>Proc\u00e9der \u00e0 un r\u00e9glage fin ou activer l'AHI de mani\u00e8re s\u00e9lective (table par table, lorsque cela s'av\u00e8re pertinent)<\/li>\n  <li>D\u00e9ploiement progressif en production, accompagn\u00e9 d'un suivi rigoureux et d'une option de retour en arri\u00e8re rapide<\/li>\n<\/ol>\n<p>La rigueur dans la documentation est essentielle : les valeurs des param\u00e8tres, les plages horaires, les profils de charge et les valeurs mesur\u00e9es doivent figurer sans omission dans le journal des modifications. C'est la seule fa\u00e7on de pouvoir attribuer correctement les effets a posteriori.<\/p>\n\n<h2>R\u00e9glage fin combin\u00e9 \u00e0 d'autres optimisations<\/h2>\n<p>L'AHI ne remplace pas une base solide. De bons index, des plans de recherche all\u00e9g\u00e9s et des <code>JOIN<\/code>- Les strat\u00e9gies restent le premier choix. L'AHI agit comme un acc\u00e9l\u00e9rateur sur des requ\u00eates ponctuelles d\u00e9j\u00e0 efficaces. Je v\u00e9rifie donc en parall\u00e8le :<\/p>\n<ul>\n  <li>Les \u00e9galit\u00e9s fr\u00e9quentes disposent-elles d'un index s\u00e9lectif adapt\u00e9 (id\u00e9alement avec couverture) ?<\/li>\n  <li>Les couches de mise en cache peuvent-elles all\u00e9ger la charge du niveau applicatif (par exemple, les lectures tr\u00e8s \u201e sollicit\u00e9es \u201c) ?<\/li>\n  <li>Est-il possible de limiter ou de r\u00e9\u00e9crire les scans de plage surdimensionn\u00e9s ?<\/li>\n<\/ul>\n<p>C'est lorsque ces pr\u00e9paratifs sont men\u00e9s \u00e0 bien que l'AHI d\u00e9ploie pleinement son potentiel ; \u00e0 l'inverse, lorsqu'ils font d\u00e9faut, l'AHI ne fait que masquer les probl\u00e8mes \u00e0 court terme.<\/p>\n\n<h2>Bilan succinct de mes choix en mati\u00e8re de tuning<\/h2>\n<p>Pour moi, l'AHI est un outil cibl\u00e9, pas un interrupteur universel. Pour les requ\u00eates ponctuelles \u00e0 forte intensit\u00e9 de lecture, cette fonction apporte souvent des gains \u00e9vidents ; en revanche, en cas de parall\u00e9lisme \u00e9lev\u00e9 et de mises \u00e0 jour fr\u00e9quentes, ce sont les co\u00fbts li\u00e9s aux verrous et \u00e0 la maintenance qui pr\u00e9dominent. Je prends mes d\u00e9cisions en m'appuyant sur les donn\u00e9es, j'active AHI de mani\u00e8re s\u00e9lective et je proc\u00e8de syst\u00e9matiquement \u00e0 des mesures de suivi, plut\u00f4t que de me fier aveugl\u00e9ment \u00e0 de pr\u00e9tendues valeurs empiriques. Le partitionnement aide \u00e0 lutter contre les conflits de verrouillage, mais son efficacit\u00e9 d\u00e9pend de la qualit\u00e9 des mesures qui l'accompagnent. Ceux qui appliquent cette approche de mani\u00e8re coh\u00e9rente augmentent la <strong>Performances de MariaDB<\/strong> perceptible, permet de maintenir des latences contr\u00f4l\u00e9es et rend la maintenance pr\u00e9visible.<\/p>","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvrez le fonctionnement de l'index adaptatif MariaDB, ses avantages et ses inconv\u00e9nients, ainsi que la mani\u00e8re de l'utiliser de mani\u00e8re cibl\u00e9e dans le cadre de l'optimisation d'InnoDB afin d'optimiser les performances de MariaDB. Mot-cl\u00e9 : index adaptatif.<\/p>","protected":false},"author":1,"featured_media":20915,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[781],"tags":[],"class_list":["post-20922","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-datenbanken-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"108","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"adaptive hash index","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20915","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/20922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/comments?post=20922"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/20922\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/20915"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=20922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=20922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=20922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}