control-systems-and-automation
Dépannage des performances des goulots d'étranglement dans les systèmes de gestion de bases de données relationnelles
Table of Contents
Les systèmes de gestion de bases de données (RDBMS) sont l'épine dorsale d'une infrastructure de données moderne, qui alimente tout, des applications d'entreprise aux plateformes Web orientées vers le client. La performance de la base de données se réfère à la rapidité et à l'efficacité auxquelles un système de base de données traite des données ou répond aux demandes, y compris des facteurs tels que le débit, le temps d'exécution des requêtes, la latence et l'utilisation des ressources.
Comprendre les performances de la base de données
Les goulets d'étranglement dans les performances de la base de données sont des situations où la vitesse ou la capacité d'un système de base de données est limitée par un seul composant ou un seul processus, ce qui affecte l'expérience utilisateur, l'efficacité des applications et le coût des ressources.
Les goulets d'étranglement de la performance de la base de données sont des contraintes ou des problèmes qui peuvent entraver sa capacité à fonctionner efficacement et à offrir des performances optimales, avec plusieurs facteurs contribuant à leur formation, y compris des limitations matérielles.
L'impact des questions de rendement sur les entreprises
Les goulots d'étranglement entraînent des temps de réponse lents et des interfaces non réceptives peuvent causer de la frustration aux utilisateurs, ce qui réduit la satisfaction des utilisateurs et limite l'évolutivité des applications Web, rendant difficile l'adaptation à l'augmentation du volume de données ou de la charge des utilisateurs.
Lorsque les administrateurs de bases de données ne trouvent pas et ne corrigent pas les goulets d'étranglement dans le temps, les entreprises perdent des yeux et des revenus, parfois des clients qui perdent leur vie. Les implications financières vont au-delà des ventes perdues pour inclure des coûts d'infrastructure accrus, car les organisations tentent souvent de résoudre des problèmes de performance en ajoutant simplement plus de matériel plutôt que de s'attaquer aux causes profondes.
Causes communes de performance Goulets d'étranglement dans le SGRD
L'identification de la cause fondamentale de la dégradation des performances exige une compréhension systématique des divers facteurs qui peuvent entraver les opérations de base de données, qui interagissent souvent entre elles, créant des scénarios complexes qui exigent une analyse minutieuse et des solutions ciblées.
Conception et exécution inefficaces des requêtes
Les requêtes de base de données inefficaces ou mal optimisées peuvent conduire à des performances lentes. L'inefficacité de la requête représente l'une des sources les plus courantes et les plus efficaces de goulots d'étranglement de base de données.
Les requêtes lentes peuvent être un véritable goulot d'étranglement, affectant tout, de la performance de l'application à l'expérience utilisateur. Les problèmes courants liés à la requête comprennent l'utilisation de SELECT * au lieu de spécifier les colonnes requises, ne pas filtrer les données au début de l'exécution de la requête, et créer des problèmes de requête N+1 où les applications exécutent une requête suivie de requêtes supplémentaires pour chaque ligne de résultats.
La récupération de plus de données que nécessaire ou l'exécution de regroupements et de calculs complexes dans la base de données peuvent ralentir les performances de la requête, exigeant une optimisation pour récupérer uniquement les données nécessaires.
Insuffisance ou mauvaise indexation
La création et la maintenance d'index appropriés sur les tables de données sont essentielles pour améliorer les performances des requêtes. Les index servent d'équivalent de base de données de la table des matières d'un livre, permettant au système de localiser rapidement des données spécifiques sans scanner chaque ligne d'une table. Sans index appropriés, les requêtes doivent effectuer des analyses de table complètes, qui deviennent de plus en plus coûteuses à mesure que les volumes de données augmentent.
Assurez-vous que vous avez des index sur les colonnes fréquemment utilisées dans les clauses OÙ pour accélérer la récupération des données. Cependant, l'indexation n'est pas simplement une question de créer autant d'index que possible. Les développeurs inexpérimentés ont tendance à créer des index pour toutes les occasions, ce qui entraîne une insertion, une suppression et une modification plus lentes des données des tables.
Consultez vos index de base de données et vérifiez si des problèmes tels que des index manquants ou inutilisés, des index dupliqués ou recoupés, ou des index fragmentés ou périmés. La maintenance et l'analyse régulières des index assurent que votre stratégie d'indexation reste alignée sur les modèles de requête et les exigences d'accès aux données.
Limites des ressources matérielles
Les bases de données peuvent consommer des ressources importantes du serveur, y compris le processeur et la mémoire, avec une discordance de ressources qui se produit si le serveur exécute plusieurs applications ou services, affectant les performances de la base de données.
Les opérations d'E/S de disque deviennent souvent le principal goulot d'étranglement dans les systèmes de base de données, en particulier lorsqu'il s'agit de travailler avec des disques tournants traditionnels plutôt que des disques à l'état solide. Les limitations physiques des temps de recherche de disque et les taux de transfert peuvent fortement restreindre les performances de la requête, indépendamment de la manière dont les requêtes sont bien écrites.
Les contraintes de mémoire obligent les bases de données à compter plus fortement sur les E/S du disque, car une RAM insuffisante empêche le système de mettre en cache les données fréquemment accessibles en mémoire. Les limitations du processeur peuvent empêcher la base de données de traiter rapidement les requêtes, en particulier pour les opérations impliquant des calculs complexes, le tri ou l'agrégation sur de grands ensembles de données.
Mauvaise conception du schéma de base de données
Les modèles de données mal conçus peuvent conduire à des requêtes inefficaces, nécessitant des opérations de base de données plus complexes et plus lentes, ce qui rend un schéma de base de données bien structuré essentiel pour une performance optimale. La base de données sur la performance repose sur la façon dont les données sont organisées et structurées.
Bien que la normalisation soit une pratique courante pour éviter la redondance des données, la surnormalisation peut conduire à des jointures complexes et à des requêtes plus lentes, avec un certain niveau de dénormalisation nécessaire pour les performances. Trouver le bon équilibre entre la normalisation pour l'intégrité des données et la dénormalisation pour les performances des requêtes représente un défi de conception critique qui nécessite de comprendre vos modèles d'accès spécifiques et les cas d'utilisation.
Consultez votre schéma de base de données et vérifiez les problèmes tels que les données redondantes ou manquantes, les types de données incohérents ou inappropriés, la normalisation ou la dénormalisation médiocre, ou l'absence de clés primaires ou étrangères.
Mécanismes de mise en cache insuffisants
L'absence de mécanismes de cache appropriés peut entraîner des requêtes fréquentes dans les bases de données, augmentant la charge et les temps de réponse, tandis que les stratégies de caches comme l'utilisation de caches en mémoire peuvent aider à atténuer ce problème.
Sans une mise en cache efficace, les applications interrogent à plusieurs reprises la base de données pour obtenir les mêmes informations, créant ainsi une charge inutile et consommant des ressources qui pourraient être utilisées pour traiter de nouvelles requêtes.
Problèmes de configuration de la base de données
Les systèmes de gestion de base de données sont équipés de paramètres de configuration par défaut conçus pour fonctionner sur une large gamme de scénarios, mais ces paramètres par défaut représentent rarement des paramètres optimaux pour des charges de travail spécifiques.
Une configuration inadéquate des bassins tampons, des bassins de connexion, des paramètres de cache de requête et d'autres paramètres peut avoir un impact significatif sur les performances. Par exemple, une taille insuffisante du bassin tampon oblige la base de données à lire plus fréquemment à partir du disque, tandis que des limites de connexion excessives peuvent gâcher la mémoire et créer des conflits.
Établissement de points de référence et de points de repère pour le rendement
Avant de pouvoir résoudre efficacement les problèmes de performance, vous devez établir à quoi ressemble la performance « normale » pour votre système de base de données. Cela nécessite la mise en oeuvre d'un suivi complet et l'établissement de niveaux de référence et de repères qui fournissent le contexte pour les mesures de performance.
Comprendre les points de référence par rapport aux points de repère
Les repères sont des compteurs de performance collectés pendant une variété de charges, utilisés pour déterminer comment votre serveur réagira sous charge et quels goulots d'étranglement existeront. Bien que les repères de référence saisissent les performances normales pendant les opérations typiques, les repères mesurent les performances dans des conditions spécifiques et contrôlées, comme les scénarios de pic de charge.
Bien que les données de référence servent de base pour comparer le rendement à divers moments pendant toute la durée de vie de vos points de comparaison, les points de repère vous permettent de comparer le rendement selon diverses charges de travail. Ensemble, ces mesures fournissent les bases pour déterminer quand le rendement s'écarte des modèles prévus et si cet écart représente un problème nécessitant une intervention.
Principaux critères à suivre
Vous devez collecter et suivre des métriques telles que l'utilisation du processeur, l'utilisation de la mémoire, les entrées/sorties de disque, la latence du réseau, le temps de réponse aux requêtes, la concordance et les occurrences d'impasse.
Vous pouvez surveiller les paramètres de stockage tels que DiskQueueDepth, ReadLatency, WriteLatency, ReadIOPS, WriteIOPS, ReadGroughput et WriteGroughput pour déterminer s'il y a des problèmes d'E/S. Les paramètres d'E/S méritent une attention particulière, car les opérations sur disque représentent souvent la contrainte principale dans les performances de la base de données.
Charge de la base de données (A moyenne Active Sessions - AAS) : Un grand nombre de sessions actives peuvent indiquer un goulot d'étranglement ou un besoin de ressources de mise à niveau.
Mise en œuvre d'une surveillance continue
La première étape pour identifier et éliminer les goulets d'étranglement de la performance de la base de données est de surveiller votre système de base de données de façon régulière et proactive. Le dépannage réactif – en attendant que les utilisateurs se plaignent de la performance avant d'enquêter – mène à de longues périodes de service dégradé et à des utilisateurs frustrés.
Les solutions modernes de surveillance fournissent une visibilité en temps réel dans les opérations de base de données, alertent les administrateurs aux anomalies et à la dégradation des performances au fur et à mesure qu'elles se produisent.
Outils et techniques de diagnostic
Pour résoudre les problèmes, il faut tirer parti des bons outils pour analyser le comportement de la base de données et identifier les causes spécifiques de la dégradation des performances.
Plans d'exécution des requêtes
Un des outils les plus importants que vous pouvez utiliser pour optimiser vos requêtes est le plan d'exécution, qui vous donne une idée claire de la façon dont votre optimisation de requête DBMS est la restructuration et l'exécution de chaque requête, avec certains DBMS supportant des outils à moteur ML qui peuvent automatiquement signaler des inefficacités et des goulets d'étranglement.
Les bases de données SQL modernes comprennent une fonction d'optimisation des requêtes qui interprétera votre requête et choisira un chemin optimal pour retourner les résultats, avec différents systèmes de gestion de bases de données ayant différentes commandes qui décomposent l'approche exacte que l'optimiseur utilise. Apprendre à lire et interpréter les plans d'exécution pour votre plateforme de base de données spécifique est une compétence essentielle pour le dépannage des performances de la base de données.
Les plans d'exécution identifient les opérations comme les analyses de table complètes, les jointures de boucle imbriquées et les opérations de tri qui peuvent indiquer des possibilités d'optimisation. En comparant les coûts estimés et les nombres de lignes dans le plan avec les statistiques d'exécution réelles, vous pouvez identifier où les hypothèses de l'optimiseur de requête diffèrent de la réalité, souvent en pointant vers des statistiques périmées ou des index manquants.
Perspectives de performance et analyse
Performance Insights fournit un outil puissant, mais convivial pour diagnostiquer et résoudre les problèmes de performance de la base de données en temps réel, permettant aux utilisateurs de surveiller et d'analyser la charge de la base de données au fil du temps, fournissant des informations sur les sessions actives et les types d'attentes de base de données qui influent sur les performances.
Le logiciel d'équilibrage de la charge de la base de données est livré avec des outils d'analyse qui identifient précisément les problèmes de base de données en temps réel, surveillent tout depuis chaque requête en lecture et écriture jusqu'aux connexions, aux performances du serveur et à la charge globale de la base de données, avec des analyses détaillées offrant des informations sur ce que vous devez corriger.
Statistiques d'attente et analyse des événements
Vous devez utiliser des outils tels que les plans d'exécution, les statistiques de requêtes, les statistiques d'attente ou les événements prolongés pour analyser votre charge de travail de base de données, vous aider à comprendre comment vos requêtes sont exécutées, combien de ressources elles consomment, combien de temps elles attendent les ressources, et quelles sont les principales causes de la dégradation des performances.
En regardant plus loin dans le tableau de bord Performance Insights, nous voyons que la majorité des événements d'attente sont liés aux E/S, la requête attend sur PAGEIOLOLATCH SH. Comprendre les événements d'attente permet de distinguer les différents types de goulots d'étranglement et vous guide vers des solutions appropriées.
Analyse de la charge de travail
La deuxième étape pour identifier et éliminer les goulets d'étranglement de la performance de la base de données est d'analyser votre charge de travail de base de données et d'identifier les requêtes les plus exigeantes en ressources ou problématiques.
L'analyse de la charge de travail consiste à examiner les tendances de la demande dans le temps, à identifier les tendances de la consommation de ressources et à établir des corrélations entre les problèmes de performance et les comportements spécifiques des applications ou les activités des utilisateurs.
Techniques d'optimisation des requêtes
Optimiser les requêtes SQL améliore les performances, réduit la consommation de ressources et assure l'évolutivité. Une fois que vous avez identifié des requêtes problématiques par le biais de la surveillance et de l'analyse, l'application de techniques d'optimisation éprouvées peut améliorer considérablement leurs performances.
Sélection de colonnes seulement obligatoires
L'utilisation de SELECT * peut ralentir les requêtes, en particulier sur les grandes tables ou lors de l'assemblage de plusieurs tables, car la base de données récupère toutes les colonnes, même celles dont vous n'avez pas besoin, en utilisant plus de mémoire, en prenant plus de temps pour transférer des données, et en rendant la requête plus difficile à optimiser.
En utilisant SELECT *, vous tirez toutes les données d'une table, augmentant considérablement la taille de chaque requête, en étant plus précis sur les colonnes que vous voulez augmenter la vitesse d'exploitation et réduire la charge, tout en offrant des avantages de sécurité.
Filtrage précoce et efficace des données
La saisie de trop de lignes peut ralentir votre requête, même si votre application n'a besoin que de 10 lignes, la base de données peut renvoyer des milliers de lignes, nécessitant l'utilisation de WHERE pour filtrer les données et LIMIT pour obtenir seulement les lignes dont vous avez besoin.
La clause WHERE doit être écrite pour tirer parti des index disponibles et minimiser le nombre de lignes examinées. Évitez d'utiliser des fonctions ou des calculs sur des colonnes indexées dans des clauses WHERE, car cela empêche la base de données d'utiliser efficacement l'index.
Optimisation des opérations de JOIN
Les jointures entre tables peuvent augmenter considérablement le temps de traitement d'une requête si elle n'est pas utilisée avec soin, avec un optimisation de requête calculant l'ordre de jointure pour trouver le plan de requête le plus efficace, et il est plus efficace d'indexer les tables d'abord, puis utiliser INNER joint pour réduire la sortie nécessaire. L'ordre dans lequel les tables sont jointes et le type de joint utilisé peut impacter significativement les performances de la requête.
N+1 se produit lorsque vous lancez une requête pour obtenir une liste, puis exécutez des requêtes supplémentaires pour chaque élément, exigeant la récupération de données connexes dans une seule requête en utilisant JOINs à la place. Ce anti-pattern commun crée des aller-retours de base de données excessives et peut dégrader sévèrement les performances de l'application.
Utilisation d'opérateurs appropriés
Lorsque vous voulez vérifier si un enregistrement spécifique existe dans une table, l'utilisation de l'opérateur EXISTS est souvent plus rapide que l'utilisation de IN, en particulier lorsque la sous-requête renvoie un grand nombre de lignes, car EXISTS arrête de rechercher dès qu'il trouve le premier enregistrement correspondant. Choisir les bons opérateurs SQL pour votre cas d'utilisation spécifique peut améliorer l'efficacité de la requête.
De même, évitez de démarrer des modèles Like avec des jokercards lorsque cela est possible, car cela empêche l'utilisation d'index et force les scans de table complets.
Tirer parti des conseils de questionnement avec judicité
Les conseils de base de données sont des instructions spéciales que nous pouvons ajouter à nos requêtes pour exécuter une requête plus efficacement, mais ils doivent être utilisés avec prudence. Les conseils de base de données vous permettent de passer outre les décisions de l'optimiseur de base de données, forçant des stratégies d'exécution spécifiques ou l'utilisation d'index.
Une indication de requête est une partie d'une instruction qui peut surcharger le plan d'exécution de l'optimiseur de requête, mais utiliser une indication pour éviter un goulot d'étranglement ne résout pas la question du goulot d'étranglement mais la contourne simplement. Bien que les indications peuvent fournir des améliorations immédiates de performance dans des scénarios spécifiques, elles doivent être considérées comme des solutions temporaires pendant que vous abordez des problèmes sous-jacents comme des indices manquants ou des statistiques dépassées.
Stratégies d'indexation pour une performance optimale
L'indexation de la base de données est une technique puissante pour optimiser les performances des requêtes et assurer une récupération efficace des données, avec des index dans différents types, chacun avec ses propres cas d'utilisation et compromis, nécessitant une compréhension des modèles de requêtes et une surveillance régulière.
Comprendre les types d'index
Les index B-tree, le type le plus courant, fonctionnent bien pour les requêtes de gamme et les comparaisons d'égalité. Les index Hash excellent aux recherches de gammes exactes mais ne peuvent pas supporter les requêtes de gamme. Les index Bitmap gèrent efficacement les colonnes avec une cardinalité faible, tandis que les index texte intégral permettent des capacités de recherche de texte sophistiquées.
Les index groupés commandent physiquement les données de table selon la colonne indexée, ce qui les rend idéales pour les requêtes de plage mais vous limitant à un par table. Les index non groupés maintiennent des structures séparées pointant vers les lignes de table, permettant plusieurs index par table mais nécessitant des recherches supplémentaires pour récupérer des données de ligne complète.
Création d'index de couverture
Un index de couverture comprend toutes les colonnes nécessaires pour remplir une requête, ce qui signifie que la base de données n'a pas besoin d'accéder à la table sous-jacente, accélérant les requêtes de recherche en réduisant le nombre d'opérations d'E/S du disque global.
La mise en œuvre d'index couvrants peut améliorer considérablement les performances des requêtes, en particulier lorsqu'il s'agit de requêtes complexes sur plusieurs colonnes ou tables. Cependant, couvrir des index consomme plus d'espace de stockage et crée des frais généraux supplémentaires pour les opérations d'écriture, de sorte qu'ils doivent être créés sélectivement pour les requêtes fréquemment exécutées.
Mise en œuvre des indices partiels
Lorsqu'un sous-ensemble de données est fréquemment interrogé, des index partiels peuvent être créés pour couvrir uniquement ce sous-ensemble, réduisant la taille de l'index et améliorant les performances de la requête, comme la création d'un index partiel pour les utilisateurs actifs dans une table d'utilisateurs.
Cette approche s'avère particulièrement utile lorsque les requêtes filtrent systématiquement certaines conditions, comme les drapeaux d'état ou les plages de dates. En indexant uniquement les lignes pertinentes, les index partiels restent plus petits et plus efficaces que les index de table complète tout en offrant les avantages de performance pour les requêtes ciblées.
Index composites pour colonnes multiples
Les index composites couvrent plusieurs colonnes et peuvent améliorer considérablement les performances des requêtes qui filtrent ou trient sur plusieurs champs. L'ordre des colonnes d'un index composite est important de façon significative – l'index ne peut être utilisé efficacement que lorsque les conditions de requête correspondent aux colonnes les plus à gauche de la définition de l'index.
Lors de la conception des index composites, placez les colonnes les plus sélectives en premier et considérez les motifs de requête qui utiliseront l'index. Un index composite bien conçu peut servir plusieurs requêtes avec différentes combinaisons de colonnes, tandis qu'un index mal conçu peut ne pas être utilisé malgré la consommation de ressources de stockage et de maintenance.
Maintenance et surveillance de l'index
Vérifier et surveiller régulièrement l'utilisation des index pour maintenir les requêtes rapidement. Les index nécessitent une maintenance continue pour rester efficaces. Au fil du temps, les index peuvent être fragmentés à mesure que les données sont insérées, mises à jour et supprimées, réduisant ainsi leur efficacité.
La plupart des systèmes de bases de données fournissent des outils pour analyser l'utilisation des index et recommander des optimisations en fonction des charges de travail réelles des requêtes.
Optimisation du matériel et de l'infrastructure
Si l'optimisation des requêtes et des index peut résoudre de nombreux problèmes de performance, certains goulots d'étranglement découlent de limitations matérielles qui nécessitent des solutions au niveau de l'infrastructure.
Optimisation des performances de stockage
Comprendre les modèles d'E/S de votre charge de travail peut vous guider dans la sélection du type de stockage optimal pour votre exemple RDS, en conciliant les besoins de performance avec la rentabilité.
La performance peut également être affectée par la taille de l'IOPS, avec une taille élevée de l'IOPS conduisant à une rupture de débit causant des goulets d'étranglement et une lenteur due à des ressources inadéquates de l'IO.
Les services de base de données Cloud offrent différents niveaux de stockage avec des caractéristiques et des coûts différents. Le choix du niveau approprié en fonction de vos exigences en matière d'E/S évite à la fois la surproduction (dépense) et la sous-production (créant des goulets d'étranglement).
Mémoire et mise à niveau du processeur
Si la charge dépasse systématiquement les ressources disponibles (comme les VCPU), il peut être temps de les augmenter ou de les supprimer, le SDR permettant une échelle facile de l'instance, ajoutant plus de ressources de calcul pour répondre à la demande.
Envisager d'héberger votre serveur de base de données sur un serveur ou une instance dédié pour réduire la discordance des ressources, en adaptant l'allocation des ressources en fonction des exigences de la charge de travail.
L'allocation de mémoire mérite une attention particulière, car une RAM adéquate permet de stocker les données fréquemment accessibles et d'éviter les opérations coûteuses d'entrée/sortie du disque.
Écaillage horizontal et répartition des charges
Les logiciels d'équilibrage de la charge de la base de données permettent aux applications d'utiliser des serveurs supplémentaires sans changement de code, y compris souvent la mise en cache, ce qui peut augmenter considérablement les performances, ce qui facilite l'échelle horizontale et aide à identifier d'autres goulets d'étranglement.
Le logiciel d'équilibrage de la charge de la base de données effectue des requêtes de l'application vers plusieurs serveurs de manière sûre et cohérente, avec une répartition automatique de lecture/écriture assurant des performances élevées en détournant toutes les requêtes de lecture vers les répliques de lecture disponibles et en écrivant au serveur maître.
La mise en œuvre d'une échelle horizontale nécessite un examen attentif des exigences en matière de cohérence des données, du décalage entre les données et de l'architecture des applications.
Configuration et paramètres de la base de données
Les systèmes de gestion de base de données exposent de nombreux paramètres de configuration qui contrôlent le comportement, l'allocation des ressources et les stratégies d'optimisation.
Configuration du pool de connexion
Utilisez le pooling de connexion pour gérer le nombre de sessions actives, en réduisant la charge sur la base de données, en ajoutant la mise en cache au niveau de l'application, et en réduisant la pression des données fréquemment accessibles.
Le pool de connexion approprié équilibre l'utilisation des ressources avec des exigences de cohérence. Trop peu de connexions créent des files d'attente et des retards, tandis que trop de connexions gaspillent la mémoire et peuvent submerger le serveur de base de données.
Statistiques de l'optimisation des requêtes
Les optimisations s'appuient fortement sur les statistiques de base pour estimer le coût des différents plans d'exécution, avec des statistiques décrivant les caractéristiques clés des données stockées, permettant à l'optimiseur d'estimer le nombre de lignes que la requête retournera, mais si les statistiques deviennent obsolètes ou inexactes, l'optimiseur peut sélectionner des plans d'exécution inefficaces.
La plupart des systèmes de base de données fournissent des mécanismes pour mettre à jour automatiquement les statistiques, mais celles-ci ne fonctionnent pas assez souvent pour permettre une évolution rapide des données. La mise à jour manuelle des statistiques après des modifications importantes des données ou selon un calendrier régulier contribue à maintenir l'efficacité de l'optimisation.
Paramètres de la piscine tampon et de la cache
Le pool tampon cache les pages de données en mémoire, réduisant ainsi le besoin de données d'entrée/sortie du disque. L'attribution de la mémoire appropriée au pool tampon représente l'un des changements de configuration les plus importants que vous pouvez faire. En général, vous devez allouer autant de mémoire que possible au pool tampon tout en laissant suffisamment de mémoire pour le système d'exploitation et d'autres processus de base de données.
Les stratégies d'invalidation du cache doivent toutefois s'assurer que les résultats mis en cache restent exacts au fur et à mesure que les données sous-jacentes changent. L'équilibre des taux de frappe du cache par rapport à la consommation de mémoire et aux frais généraux d'invalidation nécessite une surveillance et un réglage basés sur les modes d'utilisation réels.
Techniques d'optimisation avancées
Au-delà des pratiques d'optimisation fondamentales, les techniques avancées peuvent relever des défis spécifiques en matière de performance et libérer des gains de performance supplémentaires dans des scénarios complexes.
Partitionnement et rembourrage
Le cloisonnement et le sharding sont deux techniques de distribution des données dans le cloud, avec la partition divisant une grande table en plusieurs tables plus petites, chacune avec sa clé de partition, généralement basée sur des horodatages ou des valeurs entières. Le cloisonnement divise de grandes tables en pièces plus petites et plus gérables qui peuvent être posées plus efficacement.
La partition de la table permet à la base de données d'éliminer les partitions entières de l'exécution de la requête lorsque les filtres correspondent aux clés de partition, réduisant ainsi considérablement la quantité de données à scanner. Cette technique s'avère particulièrement efficace pour les données de séries chronologiques ou d'autres ensembles de données partitionnés naturellement.
Le recoupement distribue les données dans plusieurs instances de base de données, chacune responsable d'un sous-ensemble de données totales. Bien que plus complexe à implémenter que le partitionnement, le recoupement permet une échelle horizontale au-delà des limites d'un seul serveur de base de données.
Vues matérialisées
Les vues matérialisées sont précalculées et stockées les résultats de la requête qui peuvent être accessibles rapidement plutôt que de recalculer la requête chaque fois qu'elle est référencée, bien que lorsque les données sous-jacentes changent, la vue matérialisée doit être manuellement ou automatiquement rafraîchie.
Cette technique fonctionne particulièrement bien pour signaler des requêtes qui regroupent de grandes quantités de données ou effectuent des calculs complexes. Plutôt que d'exécuter des opérations coûteuses sur chaque requête, la base de données maintient des résultats précalculés qui peuvent être interrogés efficacement.
Dénormalisation des performances
Si nécessaire, dénormaliser sélectivement les données pour réduire le besoin de jointures complexes mais maintenir la cohérence des données. Bien que la normalisation favorise l'intégrité des données et réduit la redondance, elle peut créer des défis de performance en exigeant plusieurs jointures pour récupérer des données connexes.
Cette approche exige une attention particulière aux compromis entre la performance de la requête et la cohérence des données. Les données dénormalisées doivent être synchronisées par des déclencheurs logiques d'application ou de base de données, ce qui ajoute de la complexité aux opérations d'écriture. Cependant, pour les charges de travail lourdes en lecture où les modèles de requête spécifiques dominent, la dénormalisation peut apporter des avantages de performance substantiels.
Techniques de compression
La compression des données réduit les besoins de stockage et peut améliorer les performances d'E/S en réduisant la quantité de données à lire à partir du disque.
La compression par colonne fonctionne particulièrement bien pour les charges de travail analytiques, avec des taux de compression élevés sur les colonnes avec des valeurs répétitives. La compression par ligne convient mieux aux charges de travail transactionnelles, bien qu'avec des taux de compression plus faibles.
Méthodologie de dépannage systématique
En essayant de corriger un ralentissement sans identifier et isoler la cause racine, on augmente le temps consacré au dépannage, en se concentrant sur l'analyse de la cause racine, ce qui vous permet d'identifier ce qui ne fonctionne pas comme prévu et d'apporter les changements nécessaires, en améliorant l'efficacité du dépannage.
Isoler le problème
Des méthodes indépendantes de test de performance sont efficaces pour vous aider à comprendre les capacités et les performances de chaque composant, en soumettant votre base de données ou API à des tests de charge, de stress et d'évolutivité qui aident à répondre à des questions importantes et à détecter les goulets d'étranglement.
Les fournisseurs de services doivent pouvoir remonter à un moment où la performance était acceptable pour détecter si un changement à la topologie a causé un problème, les systèmes de gestion du changement permettant d'isoler facilement les changements de code ou de schéma responsables de problèmes de performance.
Essais et validation
Après avoir mis en œuvre des optimisations, des tests approfondis valident que les changements produisent les améliorations attendues sans introduire de nouveaux problèmes. Tests de performance doit mesurer non seulement le temps d'exécution des requêtes mais aussi la consommation de ressources, la manipulation de la concordance et le comportement dans diverses conditions de charge.
Les tests A/B de différentes approches d'optimisation permettent d'identifier les solutions les plus efficaces pour votre charge de travail spécifique. Ce qui fonctionne bien dans un environnement peut ne pas se traduire par des différences dans la distribution des données, les modèles de requête ou les caractéristiques matérielles.
Documenter et surveiller les changements
La tenue à jour de la documentation détaillée des problèmes de performance, des efforts d'optimisation et des résultats crée des connaissances institutionnelles qui profitent à l'avenir de dépannage.
La surveillance continue après l'application des changements assure que les optimisations restent efficaces à mesure que les charges de travail évoluent. Les caractéristiques de performance peuvent changer au fil du temps en raison de la croissance des données, de l'évolution des modèles de requête ou des mises à jour d'application.
Tendances nouvelles dans la gestion du rendement des bases de données
L'optimisation des requêtes évolue au-delà de la planification traditionnelle fondée sur les coûts, avec des systèmes de bases de données modernes intégrant désormais l'automatisation, l'exécution adaptative et l'intelligence artificielle pour améliorer la façon dont les requêtes sont analysées et exécutées, y compris les capacités de base de données autonomes.
Optimisation assistée par l'IA
L'intelligence artificielle et l'apprentissage machine entrent rapidement dans l'espace RDBMS, avec des services de base de données modernes ajoutant des fonctionnalités de réglage autonome qui libèrent les DBA de l'optimisation de routine, en utilisant ML pour fixer des plans de requête et construire des index manquants en analysant les paramètres historiques de charge de travail.
Les outils de performance SQL et les tableaux de bord DBaaS offrent désormais des recommandations d'index basées sur l'IA et une vision du plan de requête, avec des modèles ML qui examinent les antécédents d'exécution pour suggérer la création ou la suppression d'index, ou le passage à des types d'index avancés.
Services de base de données Cloud-Native
AWS est leader dans les services gérés matures avec une grande observabilité et des options DB globales, Azure offre une compatibilité profonde des fonctionnalités SQL et des niveaux d'hyperscale élastiques, Google Spanner cible la cohérence globale à l'échelle du cloud, avec 2024-25 tendances montrant la convergence comme fournisseurs de cloud faire cuire l'IA et la télémétrie dans RDBMS.
Les options de base de données sans serveur permettent d'évaluer automatiquement les ressources en fonction de la demande, éliminant ainsi la nécessité de planifier manuellement les capacités et de réduire les coûts pendant les périodes de faible utilisation.
Observabilité et surveillance unifiée
Les plateformes modernes d'observation offrent une visibilité unifiée entre les bases de données, les applications et l'infrastructure, corrélant les données de rendement provenant de sources multiples et fournissant des perspectives holistiques.
Les fonctions de traçage réparties suivent les demandes au fur et à mesure qu'elles se présentent dans des architectures d'application complexes, en identifiant exactement où le temps est consacré et quelles opérations de base de données contribuent à la latence générale.
Meilleures pratiques pour un rendement soutenu
Le maintien d'un rendement optimal des bases de données exige une attention constante et le respect de pratiques éprouvées qui empêchent les problèmes avant qu'ils n'aient des répercussions sur les utilisateurs.
Calendriers d'entretien réguliers
La mise en place de fenêtres de maintenance régulières pour des tâches comme la reconstruction des indices, les mises à jour statistiques et les contrôles d'intégrité des bases de données empêche la dégradation progressive des performances.
Les tâches de maintenance automatisées peuvent traiter des tâches courantes comme les mises à jour statistiques et la réorganisation de l'index, mais un examen manuel périodique garantit que les processus automatisés fonctionnent correctement et identifie les problèmes nécessitant une intervention humaine.
Planification des capacités et gestion de la croissance
La planification proactive des capacités basée sur les tendances de croissance empêche les crises de performance causées par le dépassement de la capacité du système. Le suivi des tendances d'utilisation des ressources et la projection des besoins futurs vous permettent d'évaluer l'infrastructure avant que des goulots d'étranglement ne se produisent.
Comprendre les tendances de croissance de votre application – qu'il s'agisse d'une croissance linéaire régulière, de pics saisonniers ou de poussées induites par des événements – informe les stratégies de mise à l'échelle appropriées.
Essais de performance en développement
L'intégration des tests de performance dans le cycle de développement permet d'optimiser les captures et les goulets d'étranglement potentiels avant qu'ils n'atteignent la production.
Les processus d'examen des codes devraient comprendre l'évaluation des modèles d'accès à la base de données, l'efficacité des requêtes et l'utilisation des index.
Partage des connaissances et documentation
L'élaboration de connaissances organisationnelles sur l'optimisation des performances de la base de données permet de s'assurer que l'expertise n'est pas concentrée sur quelques personnes.
Regular training and knowledge-sharing sessions help team members develop performance optimization skills. As database technologies and best practices evolve, ongoing education ensures that teams can leverage new capabilities and approaches effectively.
Liste de contrôle de dépannage pratique
Lorsque vous faites face à des problèmes de performance de la base de données, suivre une liste de contrôle systématique vous permet de ne pas négliger les étapes de diagnostic importantes ou les possibilités d'optimisation.
Évaluation initiale
- Vérifier que les performances se dégradent en comparant les paramètres actuels aux valeurs de référence
- Déterminer l'ampleur du problème — est-ce que cela affecte toutes les requêtes, les opérations spécifiques ou les utilisateurs particuliers?
- Vérifiez les modifications récentes apportées au code d'application, au schéma de base de données, à la configuration ou à l'infrastructure
- Examiner les journaux d'erreurs et les messages système pour trouver des indices sur les problèmes sous-jacents
- Évaluer l'utilisation actuelle des ressources (CPU, mémoire, E/S disque, réseau) pour identifier les ressources limitées
Analyse des requêtes
- Identifier les requêtes les plus lentes et les plus fréquemment exécutées à l'aide d'outils de surveillance de la base de données
- Examiner les plans d'exécution pour les questions problématiques afin de comprendre comment ils sont traités
- Recherchez des analyses de table complètes, des boucles imbriquées sur de gros ensembles de données et des opérations de tri coûteuses
- Vérifiez si les requêtes utilisent des index disponibles ou si les indices peuvent améliorer les performances
- Vérifier que les statistiques de requêtes sont à jour et exactes
- Revoir les requêtes pour des anti-patterns communs comme SELECT *, des problèmes N+1, ou des jointures inefficaces
Évaluation de l'indice
- Analyser les statistiques sur l'utilisation des indices pour identifier les indices non utilisés consommant des ressources
- Recherchez les index manquants sur les colonnes fréquemment utilisées dans les clauses OÙ, les conditions de JOIN ou les clauses ORDER BY
- Vérifier la fragmentation de l'indice et reconstruire ou réorganiser au besoin
- Évaluer si les index composites peuvent servir plus efficacement plusieurs modèles de requêtes
- Envisager de couvrir les index pour les requêtes fréquemment exécutées qui accèdent à des ensembles de colonnes spécifiques
- Examiner les possibilités d'index partiel pour les requêtes qui filtrent systématiquement des conditions spécifiques
Examen de la configuration
- Vérifier que les tailles de pool et de cache tampon sont configurées de manière appropriée pour la mémoire disponible
- Vérifiez les paramètres de la piscine de connexion pour s'assurer qu'ils correspondent aux exigences de la cohérence
- Examiner les paramètres de la durée de la requête et de la limite de ressources
- Examiner les niveaux d'isolement des transactions et le comportement de verrouillage
- Évaluer si les paramètres de configuration ont été ajustés pour votre charge de travail spécifique ou sont toujours en utilisant des paramètres par défaut
Évaluation des infrastructures
- Surveiller les paramètres d'entrée/sortie du disque, y compris la profondeur de la file d'attente, latence, IOPS et débit
- Vérifier les modes d'utilisation du CPU et déterminer si les goulets d'étranglement sont liés au CPU
- Évaluer l'utilisation de la mémoire et l'activité d'échange
- Examiner la latence du réseau et l'utilisation de la bande passante
- Évaluer si la capacité matérielle actuelle correspond aux besoins en matière de charge de travail
- Examiner si l'échelle horizontale ou verticale permettrait de résoudre les contraintes identifiées
Conclusion
Pour identifier et éliminer les goulets d'étranglement de la performance de la base de données, vous devez suivre les meilleures pratiques qui impliquent la surveillance, l'analyse et l'optimisation de votre système de base de données. La réussite dépend de la compréhension des différents facteurs qui peuvent influer sur la performance, de la conception des requêtes et des stratégies d'indexation aux ressources matérielles et aux paramètres de configuration.
Les efforts les plus efficaces pour résoudre les problèmes suivent une méthodologie systématique qui commence par établir des niveaux de référence, continue par un diagnostic attentif à l'aide d'outils appropriés, et se termine par des optimisations ciblées validées par des tests. L'optimisation des requêtes est un élément essentiel de la collaboration avec les données SQL, avec des requêtes inefficaces augmentant les coûts et créant des risques de sécurité tout en nuisant à l'expérience client, nécessitant l'utilisation d'index, l'analyse du plan d'exécution et assurant le traitement des requêtes minimum de données nécessaires.
Avec l'évolution des technologies de base de données, de nouveaux outils et techniques s'élaborent pour simplifier la gestion des performances et libérer de nouvelles possibilités d'optimisation. L'optimisation assistée par l'IA, les services de base de données natives du cloud et les plateformes d'observation avancées transforment la façon dont les organisations abordent les performances de base de données.
En mettant en œuvre les stratégies et les techniques décrites dans ce guide, les professionnels de la base de données peuvent identifier et résoudre plus efficacement les goulets d'étranglement en matière de performance, en veillant à ce que leurs systèmes de base de données offrent la réactivité et la fiabilité que les applications modernes exigent.
Pour obtenir des ressources supplémentaires sur l'optimisation des performances de la base de données, envisagez d'explorer la documentation PostgreSQL Performance Tips[, MySQL Optimization Guide[, Microsoft SQL Server Performance Monitoring[ et AWS RDS Performance Insights[. Ces sources faisant autorité fournissent des conseils spécifiques à la plateforme qui complètent les principes généraux discutés ici, vous aidant à appliquer des techniques d'optimisation à votre environnement de base de données spécifique.