PmaControl logo PmaControl
  • Accueil
  • PmaControl
    • Agents IA 13 agents on-premise
    • Nos offres Community, Cloud, On-Premise, Premium
    • Documentation Guides, API, architecture
    • Changelog Toutes les versions stables 5.x
    • Marketplace Plugins communautaires
    • Clients 28+ entreprises
    • FAQ 25 questions / 7 catégories
    Bases de données
    • MariaDB 35 articles
    • MySQL 15 articles
    • Galera Cluster 6 articles
    • MaxScale 4 articles
    • ProxySQL 3 articles
    • Amazon Aurora MySQL 0 article
    • Azure Database 0 article
    • ClickHouse 0 article
    • GCP CloudSQL 0 article
    • Percona Server 0 article
    • SingleStore 0 article
    • TiDB 0 article
    • Vitess 0 article
    Solutions
    • Support 24×7 Urgences MariaDB & MySQL
    • Observabilité SQL Monitoring, alertes, topologie
    • Haute disponibilité Réplication, failover, Galera
    • Disaster Recovery Backup, restore, RPO/RTO
    • Sécurité & conformité Audit, RGPD, SOC2
    • Migration & upgrade Zero downtime, pt-osc, gh-ost
  • Nos offres
  • Ressources
    • Documentation Guides techniques & API
    • Centre d'optimisation MySQL Index Markdown, métriques, paramètres, incidents
    • FAQ 25 questions fréquentes
    • Témoignages Retours clients & cas d'usage
    • Blog Articles & insights
    • Roadmap Fonctionnalités à venir
    Domaines d'expertise
    • Observabilité SQL Monitoring, alertes, topologie Dot3
    • Haute disponibilité Réplication, failover, Galera
    • Sécurité & conformité Audit, RGPD, SOC2, ISO 27001
    • Disaster Recovery Backup, restore, RPO/RTO
    • Performance & optimisation Digests, EXPLAIN, tuning
    • Migration & upgrade Zero downtime, pt-osc
    Liens rapides
    • Wiki GitHub 26 pages — install, engine, plugins
    • Code source Repository GitHub officiel
    • Support 24×7 Urgences MariaDB & MySQL
    • Réserver une démo 30 min — architecture réelle
  • Support 24×7
  • Réserver une démo
Réserver une démo
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文 🇸🇦 AR العربية
Ressources › Centre d'optimisation MySQL › Calculateur de mémoire InnoDB MariaDB / MySQL

Calculateur de mémoire InnoDB MariaDB / MySQL

Calculez un scénario de mémoire InnoDB et serveur à partir de vos réglages effectifs. Les valeurs préremplies illustrent un serveur de 16 GiB ; elles ne sont pas des recommandations.

Unités binaires : 1 GiB = 1024 MiB. Accepte des octets ou K/M/G/T, par exemple 268435456, 256M, 8G. Tout reste dans votre navigateur.

Activez JavaScript pour utiliser le calculateur. Les explications et les requêtes restent accessibles ci-dessous.

Serveur et concurrence
Mémoire InnoDB

Le pool et le log buffer sont globaux. La provision de 10 % est une approximation documentée par MySQL, pas une constante MariaDB. Ajoutez les allocations non comptées : dictionnaire, verrous, transactions, adaptive hash, compression. Ne comptez pas deux fois une mesure qui inclut déjà le pool.

Autres mémoires globales
Mémoire de base par connexion

Modèle un thread par connexion : stack + deux buffers réseau initiaux + digest + supplément. Avec un thread pool, adaptez la provision. Les buffers réseau peuvent grandir ; incluez leur croissance dans le supplément ou la mémoire de requête.

Buffers par requête active

Ces buffers sont alloués à la demande. Ajustez les multiplicités au plan réel ; utilisez 0 pour une opération absente. Le supplément couvre notamment paquets, SQL, BLOB, binlog et allocations non déjà comptées. Une jointure complexe peut nécessiter plusieurs buffers.

Tables temporaires

MariaDB et MEMORY : min(tmp_table_size, max_heap_table_size) par table, pas par session. TempTable : limite RAM partagée, sans max_heap_table_size. Avant MySQL 8.0.28, tmp_table_size ne limite pas TempTable. Les blocs locaux, souvent 1 MiB ou plus, sont hors limite RAM et peuvent rester jusqu’à la fin du thread. Le mmap et les tables MEMORY utilisateur demandent une provision supplémentaire.

Mesures facultatives, séparées du calcul

0 signifie mesure absente. Les compteurs instrumentés couvrent seulement les allocations suivies ; leur somme n’est pas le RSS. Les mesures ne sont pas ajoutées au modèle.

Résultats du scénario

Mémoire InnoDB
Scénario de charge
Stress à max_connections
Marge du scénario
Allocations globales et provisions
Base des connexions
Buffers des requêtes actives
Tables temporaires et blocs locaux
Budget du serveur de base de données
InnoDB instrumenté, mesure actuelle
RSS du processus, mesure actuelle

Une estimation, pas une borne maximale garantie

La charge, les réglages de session et les allocations non instrumentées peuvent dépasser ce modèle. Le stress garde les mêmes multiplicités et rend toutes les connexions actives. Vérifiez RSS, limite cgroup, swap et pics sur une charge représentative. Les fichiers redo/undo et innodb_redo_log_capacity représentent du stockage, pas une allocation RAM équivalente.

Formules et hypothèses

C = connexions ; A = requêtes actives ; T = tables temporaires par requête. Les provisions sont ajoutées une seule fois.

InnoDB = innodb_buffer_pool_size × (1 + overhead / 100) + innodb_log_buffer_size + dictionary + locks + transactions + adaptive_hash + compression + InnoDB_extra G = InnoDB + key_buffer_size + aria_pagecache_buffer_size (MariaDB) + query_cache_size (MariaDB / MySQL 5.7) + other_global B = thread_stack + 2 × net_buffer_length + max_digest_length + session_extra Q = sort_buffer_size × sorts + join_buffer_size × joins + read_buffer_size × scans + read_rnd_buffer_size × random_reads + query_extra Total = G + C × B + A × Q + Temp Stress: C = A = max_connections

Estimer précisément la mémoire InnoDB

La mémoire InnoDB dépasse innodb_buffer_pool_size. Le calcul inclut le buffer pool, une provision ajustable pour ses structures, le buffer global innodb_log_buffer_size et les autres allocations InnoDB que vous renseignez. MySQL documente environ 10 % de mémoire supplémentaire pour les structures du pool ; la provision réelle dépend du binaire et de la charge, notamment avec MariaDB. Utilisez la valeur effective en cours, qui peut différer de la configuration demandée après arrondi du pool.

Le dictionnaire, l’index adaptive hash, les verrous, les structures de transaction et la compression peuvent ajouter de la mémoire. Mesurez-les si possible et ajoutez uniquement les allocations absentes du pool ou de sa provision. Les capacités redo, les fichiers redo et les tablespaces undo sont du stockage : n’ajoutez pas leur taille de fichier à la RAM. Le sous-total InnoDB exclut les autres moteurs, Performance Schema, les buffers de connexion/requête et le système.

Relever les paramètres actifs

Exécutez ces requêtes en lecture seule sur le serveur cible. Les variables absentes sont ignorées par SHOW ... WHERE. Threads_running inclut la requête de mesure et reste une photographie ; utilisez une concurrence représentative et les pics enregistrés. Max_used_connections est un pic de connexions, pas de requêtes actives. Vérifiez aussi les paramètres depuis les connexions applicatives : la session actuelle ne décrit pas toutes les sessions.

SELECT VERSION();
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
  'innodb_buffer_pool_size', 'innodb_log_buffer_size', 'innodb_page_size',
  'key_buffer_size', 'aria_pagecache_buffer_size', 'query_cache_size',
  'max_connections', 'thread_handling', 'thread_stack', 'net_buffer_length',
  'max_digest_length', 'max_allowed_packet', 'sort_buffer_size',
  'join_buffer_size', 'read_buffer_size', 'read_rnd_buffer_size',
  'tmp_table_size', 'max_heap_table_size', 'internal_tmp_mem_storage_engine',
  'temptable_max_ram', 'temptable_max_mmap', 'temptable_use_mmap'
);
SHOW GLOBAL STATUS WHERE Variable_name IN (
  'Threads_connected', 'Threads_running', 'Max_used_connections',
  'Created_tmp_tables', 'Created_tmp_disk_tables',
  'Innodb_buffer_pool_pages_total', 'Innodb_buffer_pool_pages_data',
  'Innodb_buffer_pool_pages_free'
);
SHOW SESSION VARIABLES WHERE Variable_name IN (
  'sort_buffer_size', 'join_buffer_size', 'read_buffer_size',
  'read_rnd_buffer_size', 'tmp_table_size', 'max_heap_table_size',
  'internal_tmp_mem_storage_engine', 'max_allowed_packet'
);
SHOW ENGINE INNODB STATUS;

Mesurer InnoDB et le processus

Si votre version expose cette table mémoire Performance Schema et que les instruments InnoDB sont actifs, examinez les allocations actuelles ci-dessous. La couverture varie selon la version ; activer les compteurs tardivement ne reconstitue pas toutes les allocations antérieures. Des lignes absentes ou nulles ne prouvent pas une consommation nulle. Ne sommez pas les maxima par instrument pour déduire un pic simultané. Renseignez la somme actuelle dans la mesure InnoDB facultative ; elle reste séparée du modèle.

SELECT EVENT_NAME,
       ROUND(CURRENT_NUMBER_OF_BYTES_USED / 1048576, 2) AS current_mib,
       ROUND(HIGH_NUMBER_OF_BYTES_USED / 1048576, 2) AS high_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%'
ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC;

SELECT ROUND(SUM(CURRENT_NUMBER_OF_BYTES_USED) / 1048576, 2)
       AS instrumented_innodb_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%';

Sous Linux, le RSS ci-dessous est en KiB ; utilisez le suffixe K ou divisez par 1024 pour obtenir des MiB. Il couvre le processus entier. Tenez compte des limites cgroup, du cache système, de la rétention de l’allocateur et des autres services.

ps -C mariadbd,mysqld -o pid=,rss=,comm=

Tables temporaires et limites pratiques

Pour MariaDB et MySQL utilisant MEMORY pour les tables temporaires internes, la plus petite valeur entre tmp_table_size et max_heap_table_size limite chaque table. Plusieurs tables et buffers de jointure peuvent coexister dans une requête. Le modèle applique vos multiplicités aux requêtes actives ; il n’alloue pas tous les buffers à chaque connexion inactive.

Pour MySQL TempTable, temptable_max_ram est partagé entre les sessions. Depuis 8.0.28, tmp_table_size limite aussi chaque table. Le profil antérieur applique seulement le plafond partagé. Les blocs locaux sont hors plafond RAM ; le modèle provisionne un bloc par connexion, car il peut rester jusqu’à la fin du thread. Ce bloc peut dépasser l’exemple de 1 MiB. Les fichiers temporaires mmap peuvent ajouter des pages résidentes : leur plafond de fichier n’équivaut pas à une allocation RAM.

Le stress rend toutes les connexions max_connections actives avec la même forme de requête. Ce n’est pas une borne maximale garantie. Provisionnez tables MEMORY utilisateur, croissance réseau, données SQL/BLOB, caches binlog, réplication, requêtes préparées, cache de threads et allocations absentes. Confrontez le modèle aux pics du processus sur une charge représentative. Ni cette estimation ni une cible de réglage n’impose un plafond mémoire.

Sources et vérification

Vérifié le 13 octobre 2026. Les explications originales s’appuient sur Releem et les manuels serveur. L’exemple Releem indique 200 connexions et des limites de 32 MiB, puis multiplie par 16 MB ; le résultat cohérent avec une table par connexion est 6400 MiB = 6,25 GiB. Les règles propres au moteur priment sur une formule générique.

  • Releem — memory calculator
  • Releem — MySQL memory usage
  • Releem — tmp_table_size
  • MariaDB — memory allocation
  • MySQL — memory use
  • MySQL — temporary tables
  • MySQL — InnoDB parameters
PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
Mentions légales GitHub Contact
N'attendez pas l'incident pour comprendre votre architecture. © 2014-2026 PmaControl — 68Koncept