recherche
Maisonbase de donnéestutoriel mysqlUne référence d'optimisation MySQL plus complète

Cet article a compilé quelques méthodes générales d'optimisation pour MySQL et a fait un résumé simple à partager, dans le but d'aider les entreprises qui ne disposent pas d'un administrateur de base de données MySQL à plein temps à effectuer le travail d'optimisation de base. Quant à l'optimisation SQL spécifique, la plupart des choses. ils sont réalisés en ajoutant des index appropriés. L'effet peut être obtenu, et les plus complexes nécessitent une analyse détaillée.

1. Optimisation liée à la couche matérielle

1.1. Liée au processeur

Dans les paramètres du BIOS du serveur, vous pouvez ajuster le Plusieurs configurations suivantes sont conçues pour maximiser les performances du processeur ou éviter les problèmes NUMA classiques :

1. Sélectionnez le mode Performance par watt optimisé (DAPC) pour maximiser les performances du processeur. L'exécution de la base de données nécessite généralement un calcul élevé. Si vous utilisez un grand nombre de services, n'envisagez pas d'économie d'énergie ;

2. Désactivez les options telles que les états C1E et C pour améliorer l'efficacité du processeur

3. Sélectionnez Performances maximales pour ; Fréquence de la mémoire (meilleures performances) ;

4. Dans le menu des paramètres de mémoire, activez l'entrelacement des nœuds pour éviter les problèmes NUMA

1.2 liés aux E/S du disque

Ce qui suit : sont triés en fonction de l'ampleur de l'amélioration des performances IOPS, certaines mesures qui peuvent être optimisées pour les E/S disque :

1. Utilisez des périphériques SSD ou PCIe SSD pour obtenir au moins des centaines, voire des dizaines de milliers de fois l'amélioration des IOPS ;

2. L'achat d'une carte réseau équipée à la fois de modules CACHE et BBU peut augmenter considérablement les IOPS (se réfère principalement aux disques mécaniques, à l'exception des SSD ou SSD PCIe. Dans le même temps, il est nécessaire de vérifier régulièrement l'état de santé état des modules CACHE et BBU pour garantir que les données ne seront pas perdues en cas d'accident );

3. Lorsqu'il y a une carte réseau, définissez la stratégie d'écriture du tableau sur WB, ou même FORCE WB (s'il y a s'il s'agit d'une double protection d'alimentation, ou si les exigences en matière de sécurité des données ne sont pas particulièrement élevées), il est strictement interdit d'utiliser la stratégie WT. Et la stratégie de lecture anticipée de matrice fermée est fondamentalement inutile et de peu d'utilité

4. Utilisez autant que possible RAID-10 au lieu de RAID-5

5. Si vous utilisez un ; disque mécanique, essayez autant que possible de choisir un disque à grande vitesse, par exemple, choisissez un disque 15KRPM au lieu d'un disque 7,2KRPM, ce qui ne vaut pas quelques dollars

2. Lié à la couche système ; optimisation

2.1. Optimisation de la couche du système de fichiers

Au niveau de la couche du système de fichiers, les mesures suivantes peuvent améliorer considérablement les performances des IOPS :

1. Utiliser le délai des deux planificateurs d'E/S /noop, et n'utilisez jamais cfq (cela ne convient pas pour exécuter des services de base de données)

2. Utilisez le système de fichiers xfs, n'utilisez jamais ext3 est à peine disponible, mais si le volume d'activité est important, vous devez utiliser xfs;

3. Ajout de plusieurs options aux paramètres de montage du système de fichiers : noatime, nodiratime, nobarrier (nobarrier est unique au système de fichiers xfs)

 2.2. 🎜>

Définir les paramètres clés du noyau appropriés. Le but de cette valeur est de réduire la tendance au swap et d'éviter de grandes fluctuations de la mémoire et des E/S du disque, entraînant des pics de charge instantanés :

1. Définir la machine virtuelle .swappiness à environ 5-10, ou même réglé sur 0 (veillez à le régler sur 0 pour RHEL 7 et supérieur, à moins que vous n'autorisiez la suppression du MOO) pour réduire les risques d'utilisation de SWAP

 2 ; . Définissez vm.dirty_background_ratio sur 5-10, et vm .dirty_ratio est défini sur environ le double pour garantir que les données sales peuvent être continuellement vidées sur le disque afin d'éviter les écritures d'E/S instantanées et les attentes importantes (similaire à innodb_max_dirty_pages_pct dans MySQL) ;

3. Définissez net .ipv4.tcp_tw_recycle et net.ipv4.tcp_tw_reuse sont tous deux définis sur 1 pour réduire TIME_WAIT et améliorer l'efficacité de TCP

4. Quant aux deux paramètres de read_ahead_kb et nr_requests ; transmis sur le réseau, après test, j'ai trouvé que l'impact de lecture de l'environnement OLTP mixte en écriture n'est pas grand (il devrait être plus efficace dans les scénarios sensibles en lecture), mais il peut y avoir un problème avec ma méthode de test, vous peut décider de l'ajuster vous-même ;

3. Optimisation liée à la couche MySQL

3.1 À propos de la sélection de version

Nous appelons la version officielle ORACLE MySQL Il n'y a rien à dire. à ce sujet. Je crois que la plupart des gens le choisiront.

Personnellement, je recommande fortement de choisir la version de la branche Percona. Il s'agit d'une version de branche MySQL relativement mature et excellente qui a apporté de nombreuses améliorations en termes de performances, de fiabilité et de gestion. Il est fondamentalement entièrement compatible avec la version officielle d'ORACLE MySQL et ses performances ont été améliorées d'environ 20 % ou plus, je le recommande donc en premier et je l'utilise depuis 2008.

Une autre version de branche importante est MariaDB. Il est en fait inapproprié de dire que MariaDB est une version de branche, car son objectif est de remplacer ORACLE MySQL. Il apporte principalement de nombreuses améliorations au niveau du code source sur la couche originale du serveur MySQL, et constitue également une version de branche très fiable et excellente. Cependant, cela a également entraîné de nouvelles fonctionnalités représentées par GTID qui sont incompatibles avec la version officielle (à partir de MySQL 5.7, le mode GTID est également pris en charge pour être activé ou désactivé dynamiquement en ligne, étant donné que la grande majorité des gens suivront toujours). la version officielle, par conséquent, MariaDB n'est pas recommandée en premier.

3.2. Suggestions pour ajuster les options des paramètres les plus importants

Il est recommandé d'ajuster les paramètres clés suivants pour obtenir de meilleures performances (vous pouvez utiliser le générateur my.cnf fourni par ce site pour générer le modèle de fichier de configuration) :

1. Si vous choisissez la version Percona ou MariaDB, il est fortement recommandé d'activer la fonctionnalité de pool de threads afin que les performances ne chutent pas de manière significative dans des conditions de concurrence élevée. De plus, il existe la fonction extra_port, très pratique et qui peut sauver des vies dans les moments critiques. Une autre fonctionnalité importante est la fonction QUERY_RESPONSE_TIME, qui nous permet également d'avoir une idée intuitive de la distribution globale du temps de réponse SQL

 2. Définissez default-storage-engine=InnoDB, ce qui signifie que le moteur InnoDB est utilisé par par défaut, ce qui est fortement recommandé de ne plus utiliser le moteur MyISAM. Le moteur InnoDB peut certainement répondre à plus de 99% des scénarios métier

3. Ajustez la taille de innodb_buffer_pool_size ; la plupart d'entre elles sont des tables du moteur InnoDB, pensez à le définir sur environ 50 % à 70 % de la mémoire physique

4. Définissez les valeurs de innodb_flush_log_at_trx_commit et sync_binlog en fonction des besoins réels. Si les données ne peuvent pas être perdues, définissez les deux sur 1. Si une petite perte de données est autorisée, ils peuvent être définis respectivement sur 2 et 10. Et s'il n'est pas nécessaire de se soucier de la perte des données (par exemple, sur l'esclave, elles seront refaites de toute façon), alors tout peut être mis à 0. Le degré dans lequel les performances de la base de données sont affectées par ces trois valeurs de paramètre est : élevé, moyen et faible, c'est-à-dire que la première rendra la base de données la plus lente et la dernière sera l'inverse

5. Définissez innodb_file_per_table = 1, En utilisant des espaces de table indépendants, je ne vois vraiment aucun avantage à utiliser des espaces de table partagés

6. Définissez innodb_data_file_path = ibdata1:1G:autoextend ; n'utilisez pas la valeur par défaut de 10 M, sinon la concurrence sera élevée.

7. Définissez innodb_log_file_size=256M et innodb_log_files_in_group=2, ce qui peut essentiellement répondre à plus de 90 % des scénarios ;

8. Définissez long_query_time = 1, dans la version 5.5 et supérieure, il peut être défini sur moins de 1. Il est recommandé de le définir sur 0,05 (50 millisecondes) pour enregistrer les SQL qui s'exécutent lentement pour une analyse et un dépannage ultérieurs ;

9. En fonction des besoins réels de l'entreprise, ajustez de manière appropriée max_connection (nombre maximum de connexions) et max_connection_error (nombre maximum d'erreurs). Il est recommandé de le définir à plus de 100 000, tandis que les paramètres open_files_limit, innodb_open_files, table_open_cache et table_definition_cache peuvent être définis sur environ 10 fois la taille de max_connection ;

10. Un malentendu courant est de définir tmp_table_size et max_heap_table_size relativement grands. Je les ai vus définis sur 1G. chaque session de connexion, donc ne les définissez pas trop grandes, sinon cela mènera facilement à MOO ; Certaines autres options au niveau de la session de connexion telles que : sort_buffer_size, join_buffer_size, read_buffer_size, read_rnd_buffer_size, etc., doivent également faire attention à ne pas définir. trop grand;

11. Puisqu'il a été recommandé de ne plus utiliser le moteur MyISAM, vous pouvez définir key_buffer_size Il est d'environ 32 Mo, et il est fortement recommandé de désactiver la fonction de cache de requêtes

3.3. Concernant les spécifications de conception de schéma et les suggestions d'utilisation de SQL

Vous trouverez ci-dessous plusieurs spécifications de conception de schéma courantes qui peuvent aider à améliorer l'efficacité de MySQL et les suggestions d'utilisation de SQL :

1. Toutes les tables InnoDB. sont conçus avec une colonne à incrémentation automatique qui n'a aucun objectif commercial comme clé primaire. Cela est vrai pour la plupart des scénarios. Il n'existe pas beaucoup de tables InnoDB qui sont véritablement en lecture seule, si tel est le cas, il est préférable de le faire. utilisez TokuDB ;

2. En partant du principe que la longueur du champ répond aux besoins, choisissez la plus petite longueur possible. De plus, essayez d'ajouter des contraintes NOT NULL aux attributs de champ, ce qui peut améliorer les performances dans une certaine mesure

3. Essayez de ne pas utiliser les types TEXT/BLOB autant que possible. Si nécessaire, il est recommandé de le faire. divisez-les en sous-tableaux et ne les fusionnez pas avec la table principale. Rassemblez les tableaux pour éviter de mauvaises performances de lecture lorsque SELECT * est exécuté.

4. Lors de la lecture des données, sélectionnez uniquement les colonnes dont vous avez besoin. Ne sélectionnez pas * à chaque fois pour éviter de graves problèmes de lecture aléatoire, en particulier lors de la lecture de certaines colonnes TEXTE/BLOB

6. Dans des circonstances normales, les performances de la sous-requête sont relativement médiocres et il est recommandé de la remplacer par la méthode d'écriture JOIN

8. Lors d'une requête avec une connexion multi-table, utilisez la table avec un petit ; ensemble de résultats (notez que cela fait référence à l'ensemble de résultats filtré, pas nécessairement à la petite quantité de données dans la table entière) comme table motrice

9. Lorsque plusieurs tables sont jointes et triées, le champ de tri doit ; être dans la table motrice, sinon la colonne de tri ne peut pas utiliser l'index

10. Utilisez plus d'index composés et utilisez moins de plusieurs index indépendants, en particulier Ne créez pas d'index indépendants pour certaines colonnes dont la cardinalité est trop petite ( par exemple, le nombre total de valeurs uniques de la colonne est inférieur à 255);

11. Pour SQL avec une fonction de pagination similaire, il est recommandé d'utiliser d'abord l'association de clé primaire, puis de renvoyer l'ensemble de résultats. , l'efficacité sera beaucoup plus élevée ;

3.4 Autres suggestions

D'autres suggestions concernant la gestion et la maintenance de MySQL sont :

1. Habituellement, la taille physique de la table ne dépasse pas 10 Go, le nombre de lignes dans une seule table ne dépasse pas 100 millions et la longueur moyenne des lignes ne dépasse pas 8 Ko. Si les performances de la machine sont suffisantes, MySQL peut gérer complètement cette quantité de données. vous devez vous soucier des problèmes de performances. Les principales suggestions sont les suivantes : Considérez le coût plus élevé du DDL EN LIGNE ;

2. Ne vous inquiétez pas trop du fait que le processus mysqld occupe trop de mémoire. Tant que la suppression du MOO ne se produit pas et que beaucoup de SWAP sont utilisés, tout ira bien

3. Dans Dans le passé, le but de l'exécution de plusieurs instances sur une seule machine était de pouvoir maximiser l'utilisation des ressources informatiques. Si une seule instance peut déjà consommer la plupart des ressources informatiques, il n'est pas nécessaire d'exécuter plusieurs instances

 ;

4. Utilisez régulièrement pt-duplicate-key-checker pour vérifier et supprimer l'index des doublons. Utilisez régulièrement l'outil pt-index-usage pour vérifier et supprimer les index avec une très faible fréquence d'utilisation

5. Collectez régulièrement le journal des requêtes lentes et analysez-le avec l'outil pt-query-digest ; le système Anemometer pour la gestion des requêtes lentes. Afin d'analyser les requêtes lentes et d'effectuer des travaux d'optimisation ultérieurs

6. Vous pouvez utiliser pt-kill pour tuer les requêtes SQL à long terme. Il existe une option innodb_kill_idle_transaction dans. la version Percona qui peut également réaliser cette fonction ;

7. Utilisez pt-online-schema-change pour compléter les exigences DDL EN LIGNE des grandes tables

8. Utilisez régulièrement pt-table- ; checksum et pt-table-sync pour vérifier et réparer la réplication maître-esclave MySQL Différences de données ;

Écrit à la fin : Pour cette référence d'optimisation, dans la plupart des cas, j'ai introduit des scénarios applicables si votre scénario d'application est différent. à partir de ce qui est décrit dans cet article, il est alors recommandé de procéder en fonction de la situation réelle. S'adapter au lieu de s'adapter mécaniquement. Les remises en question et les suggestions sont les bienvenues, mais les résistances habituelles sans passer par le cerveau sont rejetées.

Ce qui précède est une référence d'optimisation MySQL relativement complète. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
MySQL: une introduction à la base de données la plus populaire au mondeMySQL: une introduction à la base de données la plus populaire au mondeApr 12, 2025 am 12:18 AM

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

L'importance de MySQL: stockage et gestion des donnéesL'importance de MySQL: stockage et gestion des donnéesApr 12, 2025 am 12:18 AM

MySQL est un système de gestion de base de données relationnel open source adapté au stockage, à la gestion, à la requête et à la sécurité des données. 1. Il prend en charge une variété de systèmes d'exploitation et est largement utilisé dans les applications Web et autres domaines. 2. Grâce à l'architecture client-serveur et à différents moteurs de stockage, MySQL traite efficacement les données. 3. L'utilisation de base comprend la création de bases de données et de tables, d'insertion, d'interrogation et de mise à jour des données. 4. L'utilisation avancée implique des requêtes complexes et des procédures stockées. 5. Les erreurs courantes peuvent être déboguées par le biais de la déclaration Explication. 6. L'optimisation des performances comprend l'utilisation rationnelle des indices et des instructions de requête optimisées.

Pourquoi utiliser MySQL? Avantages et avantagesPourquoi utiliser MySQL? Avantages et avantagesApr 12, 2025 am 12:17 AM

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Décrivez les mécanismes de verrouillage InNODB (verrous partagés, verrous exclusifs, verrous d'intention, verrous d'enregistrement, verrous d'écart, serrures à clé suivante).Décrivez les mécanismes de verrouillage InNODB (verrous partagés, verrous exclusifs, verrous d'intention, verrous d'enregistrement, verrous d'écart, serrures à clé suivante).Apr 12, 2025 am 12:16 AM

Les mécanismes de verrouillage d'InnoDB incluent des verrous partagés, des verrous exclusifs, des verrous d'intention, des verrous d'enregistrement, des serrures d'écart et des mèches suivantes. 1. Le verrouillage partagé permet aux transactions de lire des données sans empêcher d'autres transactions de lire. 2. Lock exclusif empêche les autres transactions de lire et de modifier les données. 3. Le verrouillage de l'intention optimise l'efficacité de verrouillage. 4. Enregistrement de l'indice de verrouillage d'enregistrement. 5. Écart d'enregistrement de l'indice des verrous de verrouillage de l'espace. 6. Le verrouillage de la touche suivante est une combinaison de verrouillage des enregistrements et de verrouillage de l'écart pour garantir la cohérence des données.

Quelles sont les causes communes des mauvaises performances de requête MySQL médiocres?Quelles sont les causes communes des mauvaises performances de requête MySQL médiocres?Apr 12, 2025 am 12:11 AM

Les principales raisons des mauvaises performances de requête MySQL incluent le non-utilisation d'index, la mauvaise sélection du plan d'exécution par l'optimiseur de requête, la conception de table déraisonnable, le volume de données excessif et la concurrence de verrouillage. 1. Aucun indice ne provoque une requête lente et l'ajout d'index ne peut améliorer considérablement les performances. 2. Utilisez la commande Expliquez pour analyser le plan de requête et découvrez l'erreur Optimizer. 3. Reconstruire la structure de la table et l'optimisation des conditions de jointure peut améliorer les problèmes de conception de la table. 4. Lorsque le volume de données est important, les stratégies de partitionnement et de division de table sont adoptées. 5. Dans un environnement de concurrence élevé, l'optimisation des transactions et des stratégies de verrouillage peut réduire la concurrence des verrous.

Quand devriez-vous utiliser un index composite par rapport à plusieurs index uniques uniques?Quand devriez-vous utiliser un index composite par rapport à plusieurs index uniques uniques?Apr 11, 2025 am 12:06 AM

Dans l'optimisation de la base de données, les stratégies d'indexation doivent être sélectionnées en fonction des exigences de requête: 1. Lorsque la requête implique plusieurs colonnes et que l'ordre des conditions est fixe, utilisez des index composites; 2. Lorsque la requête implique plusieurs colonnes mais que l'ordre des conditions n'est pas fixe, utilisez plusieurs index mono-colonnes. Les index composites conviennent à l'optimisation des requêtes multi-colonnes, tandis que les index mono-colonnes conviennent aux requêtes à colonne unique.

Comment identifier et optimiser les requêtes lentes dans MySQL? (Journal de requête lente, performance_schema)Comment identifier et optimiser les requêtes lentes dans MySQL? (Journal de requête lente, performance_schema)Apr 10, 2025 am 09:36 AM

Pour optimiser la requête lente MySQL, SlowQueryLog et Performance_Schema doivent être utilisées: 1. Activer SlowQueryLog et définir des seuils pour enregistrer la requête lente; 2. Utilisez Performance_schema pour analyser les détails de l'exécution de la requête, découvrir les goulots d'étranglement des performances et optimiser.

MySQL et SQL: Compétences essentielles pour les développeursMySQL et SQL: Compétences essentielles pour les développeursApr 10, 2025 am 09:30 AM

MySQL et SQL sont des compétences essentielles pour les développeurs. 1.MySQL est un système de gestion de base de données relationnel open source, et SQL est le langage standard utilisé pour gérer et exploiter des bases de données. 2.MySQL prend en charge plusieurs moteurs de stockage via des fonctions de stockage et de récupération de données efficaces, et SQL termine des opérations de données complexes via des instructions simples. 3. Les exemples d'utilisation comprennent les requêtes de base et les requêtes avancées, telles que le filtrage et le tri par condition. 4. Les erreurs courantes incluent les erreurs de syntaxe et les problèmes de performances, qui peuvent être optimisées en vérifiant les instructions SQL et en utilisant des commandes Explication. 5. Les techniques d'optimisation des performances incluent l'utilisation d'index, d'éviter la numérisation complète de la table, d'optimiser les opérations de jointure et d'améliorer la lisibilité du code.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code