Structured Query Language (SQL) est un langage de programmation spécialisé utilisé pour stocker, manipuler et récupérer des données de la base de données. Il a trouvé des applications dans de nombreux systèmes de bases de données relationnelles, notamment MySQL, Postgres, Oracle, SQL Server et autres.
En utilisant des instructions SQL, les développeurs effectuent facilement diverses opérations de base de données fonctionnelles telles que la création, la mise à jour et la suppression de données.
À mesure que les volumes de données augmentent et que la technologie devient de plus en plus complexe, il devient plus important d'optimiser correctement les bases de données MySQL pour offrir une expérience utilisateur final et réduire les coûts d'infrastructure. Les outils de réglage des performances de MySQL peuvent aider les professionnels des bases de données à identifier rapidement les goulots d'étranglement, à cibler les opérations insuffisantes grâce à un examen des plans d'exécution des requêtes et à éliminer les jeux de devinette.
Avec la complexité accrue des volumes de données croissants et des charges de travail en constante évolution, le réglage des performances de la base de données et l'optimisation des requêtes MySQL sont désormais nécessaires pour maximiser l'utilisation des ressources et les performances du système.
Il existe plusieurs raisons qui rendent le réglage SQL un peu complexe pour les développeurs. Tout d'abord, cela nécessite une expertise technique approfondie pour rédiger et comprendre différents plans d'exécution. L'écriture d'instructions SQL propres et complètes relève de la responsabilité de celui qui en acquiert une connaissance approfondie.
Outre sa complexité, le réglage prend beaucoup de temps. Parce que lorsque vous avez un grand nombre d'instructions SQL à trier, cela apporte un peu d'incertitude pour savoir quelles instructions devez-vous régler et lesquelles devez-vous laisser. Et bien que chaque instruction soit différente, leur approche de réglage varie également en fonction de leurs fonctionnalités respectives.
Préparez-vous pour la mise à jour de Core Web Vitals
Ebook pour accélérer votre site Web avant de commencer à perdre du trafic.
Merci
Votre liste est en route vers votre boîte de réception.
Dans ce didacticiel, je vais expliquer comment améliorer les performances de MySQL à l'aide de quelques conseils pratiques de réglage des performances. Voyons-les donc en détail ci-dessous :
Les avantages de l'optimisation des performances MySQL
Le principal avantage d'identifier le facteur de performance pour la base de données vous permet d'éviter le sur-approvisionnement et de réduire les coûts en dimensionnant correctement vos serveurs. Il vous indique également si le déplacement du stockage de données ou l'ajout de capacité de serveur entraînera ou non une amélioration des performances, et si c'est le cas, de combien s'agira-t-il ?
La base de données de réglage pour l'optimisation des performances des requêtes MySQL ne présente pas de légers défis. Cependant, une fois correctement réglée, la base de données donne des résultats de performance intéressants avec de grandes fonctionnalités. Cela réduit non seulement la charge de tâches indésirables, mais optimise également la base de données MySQL pour une récupération plus rapide des données.
Vous pourriez également aimer : Conseils de performance PHP pour optimiser vos sites Web
Optimiser les requêtes avec les directives d'optimisation des requêtes MySQL
Suivez ces bonnes pratiques pour régler les performances de MySQL et optimiser la vitesse de la base de données.
Tout d'abord, assurez-vous de l'indexation de tous les prédicats dans les clauses WHERE, JOIN, ORDER BY et GROUP BY. WebSphere Commerce met fortement l'accent sur l'indexation des prédicats pour augmenter les performances SQL. Parce qu'une indexation incorrecte des requêtes SQL peut entraîner des analyses de table, qui finissent par entraîner des problèmes de verrouillage et d'autres problèmes.
Par conséquent, je recommande fortement d'indexer toutes les colonnes de prédicat afin que la base de données puisse bénéficier de l'optimisation des requêtes MySQL.
Vous pourriez également aimer : Guide d'optimisation des performances de Laravel
Éviter d'utiliser des fonctions dans les prédicats
La base de données n'utilise pas d'index si elle a une fonction prédéfinie dans la colonne.
Par exemple :
SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy
En raison de la fonction UPPER(), la base de données n'utilise pas l'index sur COL1. S'il n'y a aucun moyen d'éviter cette fonction dans SQL, vous devrez créer un nouvel index basé sur une fonction ou générer des colonnes personnalisées dans la base de données pour améliorer les performances.
Évitez d'utiliser un caractère générique (%) au début d'un prédicat
Le prédicat LIKE '%abc'
provoque un balayage complet de la table. Par exemple :
SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy
Dans la plupart des cas, cette utilisation de caractères génériques entraîne des limitations de performances majeures.
Éviter les colonnes inutiles dans la clause SELECT
Au lieu d'utiliser 'SELECT *', spécifiez toujours des colonnes dans la clause SELECT pour améliorer les performances de MySQL. Parce que les colonnes inutiles entraînent une charge supplémentaire sur la base de données, ralentissant ses performances ainsi que l'ensemble du processus systématique.
Utiliser la jointure interne, au lieu de la jointure externe si possible
N'utilisez la jointure externe que lorsque c'est nécessaire. Son utilisation inutile limite non seulement les performances de la base de données, mais limite également les options d'optimisation des requêtes MySQL, ce qui ralentit l'exécution des instructions SQL.
Utilisez DISTINCT et UNION uniquement si nécessaire
L'utilisation des opérateurs UNION et DISTINCT sans but majeur provoque un tri indésirable et un ralentissement de l'exécution SQL. Au lieu d'UNION, l'utilisation d'UNION ALL apporte plus d'efficacité dans le processus et améliore plus précisément les performances de MySQL.
La clause ORDER BY est obligatoire en SQL si vous vous attendez à obtenir un résultat trié
Le mot-clé ORDER BY trie le jeu de résultats dans des colonnes d'instructions prédéfinies. Bien que l'instruction apporte un avantage aux administrateurs de base de données pour obtenir les données triées, elle produit également un léger impact sur les performances de l'exécution SQL. Parce que la requête doit d'abord trier les données pour produire le jeu de résultats final, ce qui provoque une opération un peu complexe dans l'exécution SQL.
Vous pourriez également aimer : Comment joindre deux tables dans MySQL
N'utilisez pas MySQL comme file d'attente
Les files d'attente peuvent affecter les performances de votre base de données dès le cœur et peuvent entrer dans les bases de données de votre application à votre insu. Par exemple, si vous configurez un statut pour un élément particulier afin qu'un "processus pertinent" puisse y accéder, vous créez involontairement une file d'attente. Ce qu'il fait, c'est qu'il accumule du temps de chargement supplémentaire pour accéder à la ressource sans raison majeure.
Les files d'attente causent des problèmes pour deux raisons principales. Ils sérialisent votre charge de travail, empêchant l'achèvement des tâches en parallèle, et ils aboutissent souvent à une table qui contient les travaux en cours ainsi que les données historiques des travaux déjà terminés. Cela ajoute non seulement de la latence à l'application, mais entrave également le réglage des performances de MySQL.
Vous pourriez également aimer : Comment utiliser Redis pour la mise en file d'attente
Comprendre les quatre ressources fondamentales
Vous avez besoin de quatre ressources fondamentales pour créer des fonctions de base de données. CPU, disque, mémoire et réseau. Si l'un d'entre eux ne fonctionne pas correctement, cela affecte finalement le serveur de base de données et entraîne de mauvaises performances.
Pour bien comprendre les ressources fondamentales, vous devez vous concentrer sur deux domaines particuliers, à savoir choisir le bon matériel et résoudre les problèmes avec celui-ci.
Assurez-vous toujours d'utiliser des composants de performance complets lors du choix du matériel pour la base de données MySQL. Non seulement optez pour le meilleur parmi la pile, mais assurez-vous également qu'il doit y avoir le bon équilibre entre eux. Nous avons souvent vu que les organisations ont tendance à sélectionner des serveurs avec des processeurs rapides et des disques volumineux, mais ils se trompent avec une mémoire insuffisante qui finit par tuer les performances.
Dans certains scénarios, l'ajout de mémoire devient très important pour améliorer les performances en termes d'ampleur. Cela semble un peu contre-intuitif, mais dans la plupart des cas, la surutilisation des disques affecte directement les performances de la base de données. Comme le manque de mémoire suffisante pour contenir les données du serveur s'avère coûteux en faisant dérailler les performances de la base de données.
En matière de dépannage, contrôlez toujours les performances des quatre ressources fondamentales. Valider qualitativement qu'ils fonctionnent selon les besoins d'amélioration des normes. La prise en compte régulière de cet audit résoudra rapidement les problèmes majeurs survenant.
Requêtes de pagination
Les applications qui paginent ont tendance à faire tomber le serveur. En vous montrant une page de résultats, avec un lien pour aller à la page suivante, ces applications regroupent et trient généralement d'une manière qui ne peut pas utiliser d'index, et elles utilisent une fonction LIMIT et offset qui oblige le serveur à faire beaucoup de travail générant, puis supprimant des lignes.
Vous pouvez trouver des optimisations dans l'interface utilisateur elle-même. Au lieu d'afficher le nombre exact de pages dans les résultats et les liens vers une page individuelle, vous pouvez simplement afficher un lien vers la page suivante. Vous pouvez également empêcher les internautes d'accéder à des pages non pertinentes.
Du côté de la requête, au lieu d'utiliser LIMIT avec décalage, vous pouvez sélectionner une ligne de plus que nécessaire, et lorsque l'utilisateur clique sur le lien "page suivante", vous pouvez désigner cette dernière ligne comme point de départ pour le prochain ensemble de résultats . Par exemple, si l'utilisateur a consulté une page avec les lignes 101 à 120, vous devrez également sélectionner la ligne 121; pour afficher la page suivante, vous devez interroger le serveur pour les lignes supérieures ou égales à 121, limite 21.
Optimiser les sous-requêtes MySQL
Le conseil le plus important que je puisse vous donner à propos des sous-requêtes est que vous devez privilégier une jointure dans la mesure du possible, du moins dans les versions actuelles de MySQL.
Les sous-requêtes font l'objet d'un travail intense de la part de l'équipe d'optimisation, et les prochaines versions de MySQL pourraient avoir davantage d'optimisations de sous-requêtes. Gardez un œil sur les optimisations qui se retrouveront dans le code publié et sur la différence qu'elles feront. Ce que je veux dire ici, c'est que "préférer une jointure" n'est pas un conseil à l'épreuve du temps. Le serveur devient de plus en plus intelligent, et les cas où vous devez lui dire comment faire quelque chose au lieu des résultats à renvoyer sont de moins en moins nombreux.
Cache de requêtes MySQL
L'un des aspects les plus importants de la mesure des performances est la mise en cache du contenu. MySQL fournit une mise en cache des requêtes de base de données qui met en cache le texte de l'instruction SELECT et le résultat récupéré. Par conséquent, chaque fois que vous créez une base de données en double, vous appelez le cache de requête MySQL, il vous répondra et affichera le résultat du cache, et aucun appel ne sera analysé à plusieurs reprises. De cette façon, vous pouvez optimiser le processus d'optimisation du cache MySQL.
Pour configurer le cache de requête MySQL, vous devez ajouter quelques paramètres à MySQL. Tout d'abord, vous devez vérifier si le cache des requêtes est disponible ou non avec la commande suivante :
mysql> SHOW VARIABLES LIKE 'have_query_cache';
Cela montrera le résultat, OUI. Cela signifie que le cache MySQL fonctionne correctement.
+------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
Maintenant, vous pouvez configurer la taille et le type du cache de requête MySQL. N'oubliez pas que la taille minimale par défaut est de 40 Ko. La taille maximale peut être de 32 Mo. Vous pouvez configurer MySQL query_cache_size en utilisant la commande suivante :
mysql> SET GLOBAL query_cache_size = 40000;
Le type de cache de requête peut déterminer le comportement de toutes les connexions. Vous pouvez également désactiver le cache de requêtes pour les requêtes telles que :
mysql> SET SESSION query_cache_type = OFF;
Vous pouvez également définir des valeurs telles que 0, 1 et 2 pour configurer l'état de la connexion.
Utiliser Memcached pour la mise en cache MySQL
Memcached est un système de mise en cache de mémoire distribuée. Il accélère les sites Web ayant de grandes bases de données dynamiques en stockant l'objet de base de données dans la mémoire dynamique pour réduire la pression sur un serveur, chaque fois qu'une source de données externe demande une lecture. Une couche Memcached réduit le nombre de requêtes de la base de données.
Memcached stocke les valeurs (v) avec la clé (k) et récupère les valeurs (v) avec la clé (k) sans même analyser les requêtes de la base de données et évite tous ces tracas.
Pour en savoir plus sur Memcached, vous pouvez lire le guide sur la configuration de Memcache en php.
En conclusion !
Cet article fournit en détail le compte rendu des meilleures pratiques d'optimisation de base de données et des conseils pratiques de réglage des performances MySQL que chaque développeur doit connaître. C'est un guide complet pour les développeurs backend qui ne sont pas certains des performances médiocres de leur base de données et qui ont besoin de techniques pratiques pour optimiser la base de données MySQL à partir du cœur.
Si vous souhaitez ajouter vos réflexions sur le sujet ou si vous souhaitez poser des questions à ce sujet, n'hésitez pas à écrire vos commentaires dans la section des commentaires.