Bonnes pratiques pour résoudre les problèmes de performances des bases de données
Cet article explique comment résoudre les problèmes de base de données qui ont un impact négatif sur les performances de la base de données sur Adobe Commerce sur les sites d’infrastructure cloud.
Versions affectées
Adobe Commerce sur les infrastructures cloud
Identifier et résoudre les requêtes à exécution longue
Déterminez si des requêtes MySQL s’exécutent lentement. En fonction de votre plan d’infrastructure cloud Adobe Commerce et donc de la disponibilité des outils, vous pouvez effectuer les opérations suivantes.
Analyse des requêtes de base de données avec MySQL
Vous pouvez utiliser MySQL pour identifier et résoudre les requêtes à long terme sur n’importe quel projet d’infrastructure cloud d’Adobe Commerce.
- Exécutez l’instruction
SHOW \[FULL\] PROCESSLIST
. - Si vous voyez des requêtes à long terme, exécutez MySQL
EXPLAIN
etEXPLAIN ANALYZE
pour chacune d’elles, afin de déterminer ce qui fait que la requête s’exécute pendant longtemps. - En fonction des problèmes détectés, prenez les mesures nécessaires pour corriger la requête afin qu’elle s’exécute plus rapidement.
Analysez les requêtes à l'aide de Percona Toolkit (pour l'architecture Pro uniquement)
Si votre projet Adobe Commerce est déployé sur une architecture Pro, vous pouvez utiliser la boîte à outils Percona pour analyser les requêtes.
-
Exécutez la commande
pt-query-digest --type=slowlog
sur les journaux de requêtes lentes MySQL.- Pour trouver l’emplacement des journaux de requêtes lentes, voir Log locations > Service Logs(https://experienceleague.adobe.com/fr/docs/commerce-cloud-service/user-guide/develop/test/log-locations?lang=fr#service-logs) dans notre documentation destinée aux développeurs.
- Consultez la documentation Percona Toolkit > pt-query-digest .
-
En fonction des problèmes détectés, prenez les mesures nécessaires pour corriger la requête afin qu’elle s’exécute plus rapidement.
Vérifier que toutes les tables possèdent une clé primaire
La définition de clés primaires est nécessaire pour une bonne conception de la base de données et des tables. Les clés de Principal permettent d’identifier de manière unique une seule ligne dans n’importe quel tableau.
Si vous disposez de tables sans clé primaire, le moteur de base de données par défaut d'Adobe Commerce (InnoDB) utilise la première clé non nulle comme clé primaire. Si aucune clé unique n’est disponible, InnoDB crée une clé primaire masquée (6 octets). Le problème avec une clé primaire définie implicitement est que vous n’avez aucun contrôle sur celle-ci. En outre, la valeur implicite est affectée globalement à toutes les tables sans clés primaires. Cette configuration peut entraîner des problèmes de contention si vous effectuez des écritures simultanées sur ces tables. Cela peut entraîner des problèmes de performances, car les tables partagent également l’incrément d’index de clé primaire masqué global.
Pour éviter ces problèmes, définissez une clé primaire pour toutes les tables qui n'en ont pas.
Identification et mise à jour des tables sans clé primaire
-
Identifier les tables sans clé primaire à l'aide de la requête SQL suivante :
code language-sql SELECT table_catalog, table_schema, table_name, engine FROM information_schema.tables WHERE (table_catalog, table_schema, table_name) NOT IN (SELECT table_catalog, table_schema, table_name FROM information_schema.table_constraints WHERE constraint_type = 'PRIMARY KEY') AND table_schema NOT IN ('information_schema', 'pg_catalog');
-
Pour toute table dépourvue de clé primaire, ajoutez une clé primaire en mettant à jour le
db_schema.xml
(le schéma déclaratif) avec un nœud similaire au suivant :code language-html <constraint xsi:type="primary" referenceId="PRIMARY"> <column name="id_column"/> </constraint>
Lorsque vous ajoutez le nœud , remplacez les variables
referenceID
etcolumn name
par vos valeurs personnalisées.
Pour plus d’informations, consultez Configuration du schéma déclaratif dans notre documentation destinée aux développeurs.
Identification et suppression des index en double
Identifiez les index en double dans votre base de données et supprimez-les.
Rechercher les index en double
Pour rechercher des index en double sur l’architecture cloud Pro ou Starter, exécutez la requête SQL suivante.
SELECT s.INDEXED_COL,GROUP_CONCAT(INDEX_NAME) FROM (SELECT INDEX_NAME,GROUP_CONCAT(CONCAT(TABLE_NAME,'.',COLUMN_NAME) ORDER BY CONCAT(SEQ_IN_INDEX,COLUMN_NAME)) 'INDEXED_COL' FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'db?' GROUP BY INDEX_NAME)as s GROUP BY INDEXED_COL HAVING COUNT(1)>1
La requête renvoie les noms des colonnes et les noms des index en double.
Les marchands d'architecture Pro peuvent également exécuter la vérification à l'aide de la commande Percona Toolkit [pt-duplicate-key checker](https://www.percona.com/doc/percona-toolkit/LATEST/pt-duplicate-key-checker.html%C2%A0)
.
Supprimer les index en double
Utilisez l'instruction SQL DROP INDEX pour supprimer les index en double.
DROP INDEX
Informations supplémentaires
Bonnes pratiques de configuration de la base de données pour les déploiements dans le cloud