Points de connaissances associés :
INNODB_STATS_PERSIST=ON
Ou STATS_PERSIST=1
lors de la définition d'une seule table, les statistiques de l'optimiseur sont conservées sur le disque. Par défault, innodb_stats_persistent
c'est activé.
Les statistiques persistantes sont stockées dans des tables mysql.innodb_table_stats
et mysql.innodb_index_stats
.
La variable activée par défaut innodb_stats_auto_recalc
contrôle si les statistiques sont automatiquement calculées lorsque plus de 10 % des lignes du tableau changent. STATS_AUTO_RECALC
Le recalcul automatique des statistiques peut être configuré pour une table individuelle en spécifiant la clause lors de la création ou de la modification de la table .
En raison de la nature asynchrone du recalcul automatique des statistiques qui s'effectue en arrière-plan, même si cette option est activée innodb_stats_auto_recalc
, les statistiques ne seront pas recalculées immédiatement après l'exécution d'une opération DML affectant plus de 10 % de la table. Dans certains cas, le recalcul des statistiques peut être retardé de quelques secondes. Si les dernières statistiques sont nécessaires immédiatement, exécutez ANALYZE TABLE pour lancer un recalcul synchrone (au premier plan) des statistiques.
Si cette option est désactivée innodb_stats_auto_recalc
, vous pouvez garantir l'exactitude des statistiques de l'optimiseur en exécutant une instruction ANALYZE TABLE après avoir apporté un grand nombre de modifications à une colonne d'index.
Les statistiques de l'optimiseur ne sont pas conservées sur le disque lors de la création ou de la modification d'une seule table INNODB_STATS_PERSIST=OFF
à l'aide de . STATS_PERSIST=0
Au lieu de cela, les statistiques sont stockées en mémoire et sont perdues lorsque le serveur est arrêté. Les statistiques sont également mises à jour périodiquement au travers de certaines actions et sous certaines conditions.
Lorsqu'un index est ajouté à une table existante, ou lorsqu'une colonne est ajoutée ou supprimée, innodb_stats_auto_recalc
les statistiques d'index sont calculées et ajoutées à innodb_index_stats
la table quelle que soit la valeur de .
Cinq paramètres qui affectent les statistiques
-
innodb_stats_persistent
: Spécifie si les statistiques d'index InnoDB sont conservées sur le disque. Elle est activée par défaut. -
innodb_stats_persistent_sample_pages
: nombre de pages d'index à échantillonner lors de l'estimation de la cardinalité et d'autres statistiques pour les colonnes d'index (telles que celles calculées par la table d'analyse). L'augmentation de cette valeur peut améliorer la précision des statistiques d'index, maisinnodb_stats_persistent_sample_pages
la définition d'une valeur plus élevée peut ralentir l'exécution des tables d'analyse. -
innodb_stats_auto_recalc
: oblige InnoDB à recalculer automatiquement les statistiques persistantes après des modifications significatives des données de la table. Le seuil est de 10 % du nombre de lignes du tableau et est activé par défaut. -
innodb_stats_include_delete_marked
: Indique si InnoDB inclut les enregistrements marqués pour suppression lors du calcul des statistiques de l'optimiseur persistant, désactivé par défaut. -
innodb_stats_transient_sample_pages
: nombre de pages d'index à échantillonner lors de l'estimation de la cardinalité et d'autres statistiques pour les colonnes d'index (telles que celles calculées par la table d'analyse). La valeur par défaut est 8. L'augmentation de cette valeur peut améliorer la précision des statistiques d'index, améliorant ainsi les plans d'exécution des requêtes, mais au prix d'une augmentation des E/S lors de l'ouverture des tables InnoDB ou du recalcul des statistiques. Ce paramètre ne s'applique que s'il est désactivé pour la tableinnodb_stats_persistent
, s'il est activé,INNODB_STATS_PERSIST
il est appliquéINNODB_STATS_PERSIST_SAMPLE_PAGES
à la placeinnodb_stats_sample_pages
Résumer:
1. Les informations statistiques non persistantes seront automatiquement mises à jour dans les situations suivantes :
- Exécuter ANALYSER TABLE
innodb_stats_on_metadata=ON
Dans ce cas, exécutez SHOW TABLE STATUS, SHOW INDEX et interrogez les TABLES et STATISTICS sous INFORMATION_SCHEMA.- Avec la fonction --auto-rehash activée, utilisez le client MySQL pour vous connecter
- La table est ouverte pour la première fois
- Depuis la dernière mise à jour des informations statistiques, les données du tableau 1/16 ont été modifiées.
Les inconvénients des statistiques non persistantes sont évidents. Si un grand nombre de tables commencent à mettre à jour les statistiques après le redémarrage de la base de données, cela aura un impact important sur l'instance, c'est pourquoi des statistiques persistantes sont actuellement utilisées.
2. Les statistiques de persistance seront automatiquement mises à jour dans les situations suivantes :
-
INNODB_STATS_AUTO_RECALC=ON
Dans ce cas, 10% des données du tableau sont modifiées -
Ajouter un nouvel index
3. Traitement des informations statistiques inexactes
Nous avons vérifié le plan d'exécution et constaté que l'index correct n'a pas été utilisé. Si cela est dû à une grande différence dans les informations statistiques dans innodb_index_stats, cela peut être traité des manières suivantes :
- Mettez à jour manuellement les informations statistiques. Veuillez noter que des verrous de lecture seront ajoutés lors de l'exécution :
ANALYZETABLE TABLE_NAME ;
- Si les informations statistiques sont toujours inexactes après la mise à jour, vous pouvez envisager d'ajouter des pages de données pour l'échantillonnage du tableau. Il existe deux manières de les modifier :
a. La INNODB_STATS_PERSISTENT_SAMPLE_PAGES
valeur par défaut des variables globales est 20 ;
b. Un seul tableau peut spécifier l'échantillonnage du tableau :
ALTER TABLE TABLE_NAME STATS_SAMPLE_PAGES=40;
Après test, STATS_SAMPLE_PAGES
la valeur maximale ici est de 65535. Si elle dépasse, une erreur sera signalée.
c. Mettez à jour manuellement les statistiques innodb_table_stats
des innodb_index_stats
tables (la modification de ces deux tables ne générera pas de binlog), puis utilisez FLUSH TABLE tbl_name
des instructions pour charger les statistiques mises à jour.
Profitez de GreatSQL :)
À propos de GreatSQL
GreatSQL est une base de données open source nationale indépendante adaptée aux applications financières. Elle possède de nombreuses fonctionnalités de base telles que des performances élevées, une fiabilité élevée, une grande facilité d'utilisation et une sécurité élevée. Elle peut être utilisée en remplacement facultatif de MySQL ou du serveur Percona. et est utilisé dans des environnements de production en ligne, entièrement gratuit et compatible avec MySQL ou Percona Server.
Liens connexes : Communauté GreatSQL Gitee GitHub Bilibili
Communauté GreatSQL :
Suggestions et commentaires de récompenses de la communauté : https://greatsql.cn/thread-54-1-1.html
Détails de la soumission primée du blog communautaire : https://greatsql.cn/thread-100-1-1.html
(Si vous avez des questions sur l'article ou si vous avez des idées uniques, vous pouvez accéder au site Web officiel de la communauté pour les poser ou les partager ~)
Groupe d'échange technique :
Groupe WeChat et QQ :
Groupe QQ : 533341697
Groupe WeChat : ajoutez GreatSQL Community Assistant (WeChat ID : wanlidbc
) comme ami et attendez que l'assistant de communauté vous ajoute au groupe.