Aanbevolen procedures om prestatieproblemen met databases op te lossen
In dit artikel wordt besproken hoe u databaseproblemen kunt oplossen die de databaseprestaties op Adobe Commerce op cloudinfrastructuursites negatief beïnvloeden.
Betrokken versies
Adobe Commerce over cloudinfrastructuur
Langdurige query's identificeren en oplossen
Bepaal of u langzaam lopende vragen MySQL hebt. Afhankelijk van uw Adobe Commerce-plan voor cloudinfrastructuur en dus de beschikbaarheid van tools, kunt u het volgende doen.
Databasequery's analyseren met MySQL
Met MySQL kunt u langdurige query's op elk Adobe Commerce-infrastructuurproject identificeren en oplossen.
- Voer de instructie
SHOW \[FULL\] PROCESSLIST
uit. - Als u lange lopende vragen ziet, looppas MySQL
EXPLAIN
enEXPLAIN ANALYZE
voor elk van hen, om te weten te komen wat tot de vraaglooppas voor een lange tijd maakt. - Gebaseerd op de gevonden kwesties, onderneem stappen om de vraag te bevestigen zodat loopt het sneller.
Vragen analyseren met de Percona Toolkit (alleen voor Pro-architectuur)
Als uw project van Adobe Commerce op Pro architectuur wordt opgesteld, kunt u Toolkit Percona gebruiken om vragen te analyseren.
-
Voer de opdracht
pt-query-digest --type=slowlog
uit op basis van MySQL langzame querylogs.- Zie Log locations > Service Logs (https://experienceleague.adobe.com/nl/docs/commerce-cloud-service/user-guide/develop/test/log-locations?lang=nl#service-logs) in de ontwikkelaarsdocumentatie voor informatie over de locatie van de trage querylogboeken.
- Zie Toolkit Percona > pt-vraag-samenvattingdocumentatie.
-
Gebaseerd op de gevonden kwesties, onderneem stappen om de vraag te bevestigen zodat loopt het sneller.
Controleren of alle tabellen een primaire sleutel hebben
Het bepalen van primaire sleutels is een vereiste voor goed gegevensbestand en lijstontwerp. Met primaire sleutels kunt u een enkele rij in een tabel op unieke wijze identificeren.
Als u tabellen zonder een primaire sleutel hebt, gebruikt de standaard database-engine voor Adobe Commerce (InnoDB) de eerste unieke niet-null-sleutel als primaire sleutel. Als er geen unieke sleutel beschikbaar is, maakt InnoDB een verborgen primaire sleutel (6 bytes). Het probleem met een impliciet gedefinieerde primaire sleutel is dat u er geen controle over hebt. Bovendien wordt de impliciete waarde globaal toegewezen voor alle tabellen zonder primaire sleutels. Deze configuratie kan conflicten veroorzaken als u gelijktijdig schrijft over deze lijsten uitvoert. Dit kan prestatieproblemen veroorzaken omdat de tabellen ook de algemene increment voor de index van verborgen primaire sleutels delen.
Vermijd deze kwesties door een primaire sleutel voor om het even welke lijsten te bepalen die geen hebben.
Tabellen identificeren en bijwerken zonder primaire sleutel
-
Tabellen zonder primaire sleutel identificeren met de volgende SQL-query:
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');
-
Voor elke tabel waarin een primaire sleutel ontbreekt, voegt u een primaire sleutel toe door het declaratieve schema
db_schema.xml
bij te werken met een knooppunt dat lijkt op het volgende:code language-html <constraint xsi:type="primary" referenceId="PRIMARY"> <column name="id_column"/> </constraint>
Wanneer u het knooppunt toevoegt, vervangt u de variabelen
referenceID
encolumn name
door uw aangepaste waarden.
Voor meer informatie, zie declaratief schemain onze ontwikkelaarsdocumentatie vormen.
Dubbele indexen identificeren en verwijderen
Identificeer om het even welke dubbele indexen in uw gegevensbestand en verwijder hen.
Controleren op dubbele indexen
Voer de volgende SQL-query uit om te controleren op dubbele indexen op de architectuur van de Pro- of Starter-cloud.
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
De vraag keert de kolomnamen en de namen van om het even welke dubbele indexen terug.
Pro-architectuurhandelaren kunnen de controle ook uitvoeren met de opdracht Percona Toolkit [pt-duplicate-key checker](https://www.percona.com/doc/percona-toolkit/LATEST/pt-duplicate-key-checker.html%C2%A0)
.
Dubbele indexen verwijderen
Gebruik de SQL Verklaring van de INDEX van de DROPom dubbele indexen te verwijderen.
DROP INDEX
Aanvullende informatie
Best practices voor databaseconfiguratie voor cloudimplementatie