Best Practices zur Lösung von Problemen mit der Datenbankleistung
In diesem Artikel wird beschrieben, wie Datenbankprobleme behoben werden, die sich negativ auf die Datenbankleistung in Adobe Commerce auf Cloud-Infrastruktur-Sites auswirken.
Betroffene Versionen
Adobe Commerce auf Cloud-Infrastruktur
Identifizieren und Auflösen langwieriger Abfragen
Bestimmen Sie, ob MySQL-Abfragen langsam ausgeführt werden. Je nach Adobe Commerce-Plan zur Cloud-Infrastruktur und somit der Verfügbarkeit von Tools können Sie Folgendes tun:
Datenbankabfragen mit MySQL analysieren
Sie können MySQL verwenden, um langwierige Abfragen in Adobe Commerce in Cloud-Infrastrukturprojekten zu identifizieren und zu beheben.
- Führen Sie die Anweisung
SHOW \[FULL\] PROCESSLIST
aus. - Wenn Sie lange laufende Abfragen sehen, führen Sie MySQL
EXPLAIN
undEXPLAIN ANALYZE
für jede dieser Abfragen aus, um herauszufinden, was die Abfrage über einen langen Zeitraum ausführt. - Führen Sie je nach den gefundenen Problemen Schritte aus, um die Abfrage zu korrigieren, damit sie schneller ausgeführt werden kann.
Abfragen mit dem Percona Toolkit analysieren (nur für Pro-Architektur)
Wenn Ihr Adobe Commerce-Projekt in der Pro-Architektur bereitgestellt wird, können Sie die Abfragen mit dem Percona Toolkit analysieren.
-
Führen Sie den Befehl
pt-query-digest --type=slowlog
für langsame MySQL-Abfrageprotokolle aus.- Informationen zum Speicherort der langsamen Abfrageprotokolle finden Sie unter Log locations > Service Logs(https://experienceleague.adobe.com/de/docs/commerce-cloud-service/user-guide/develop/test/log-locations?lang=de#service-logs) in unserer Entwicklerdokumentation.
- Weitere Informationen finden Sie in der Dokumentation zu Percona Toolkit > pt-query-digest .
-
Führen Sie je nach den gefundenen Problemen Schritte aus, um die Abfrage zu korrigieren, damit sie schneller ausgeführt werden kann.
Überprüfen, ob alle Tabellen über einen Primärschlüssel verfügen
Die Definition von Primärschlüsseln ist eine Voraussetzung für ein gutes Datenbank- und Tabellendesign. Mit Primären Schlüsseln können Sie eine Zeile in einer beliebigen Tabelle eindeutig identifizieren.
Wenn Sie über Tabellen ohne Primärschlüssel verfügen, verwendet die standardmäßige Datenbank-Engine für Adobe Commerce (InnoDB) den ersten eindeutigen Schlüssel (nicht den Nullschlüssel) als Primärschlüssel. Wenn kein eindeutiger Schlüssel verfügbar ist, erstellt InnoDB einen ausgeblendeten Primärschlüssel (6 Byte). Das Problem mit einem implizit definierten Primärschlüssel besteht darin, dass Sie keine Kontrolle darüber haben. Darüber hinaus wird der implizite Wert für alle Tabellen ohne Primärschlüssel global zugewiesen. Diese Konfiguration kann bei gleichzeitigen Schreibvorgängen für diese Tabellen zu Konflikten führen. Dies kann zu Leistungsproblemen führen, da die Tabellen auch die Indexinkrementierung des globalen ausgeblendeten Primärschlüssels gemeinsam nutzen.
Vermeiden Sie diese Probleme, indem Sie einen Primärschlüssel für Tabellen definieren, die keine haben.
Identifizieren und Aktualisieren von Tabellen ohne Primärschlüssel
-
Identifizieren Sie Tabellen ohne Primärschlüssel mithilfe der folgenden SQL-Abfrage:
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');
-
Fügen Sie für jede Tabelle, in der ein Primärschlüssel fehlt, einen Primärschlüssel hinzu, indem Sie das
db_schema.xml
(das deklarative Schema) mit einem Knoten aktualisieren, der dem folgenden ähnelt:code language-html <constraint xsi:type="primary" referenceId="PRIMARY"> <column name="id_column"/> </constraint>
Wenn Sie den Knoten hinzufügen, ersetzen Sie die Variablen
referenceID
undcolumn name
durch Ihre benutzerdefinierten Werte.
Weitere Informationen finden Sie unter Konfigurieren des deklarativen Schemas in unserer Entwicklerdokumentation.
Identifizieren und Entfernen doppelter Indizes
Identifizieren Sie alle doppelten Indizes in Ihrer Datenbank und entfernen Sie sie.
Überprüfen auf doppelte Indizes
Um in der Pro- oder Starter-Cloud-Architektur nach doppelten Indizes zu suchen, führen Sie die folgende SQL-Abfrage aus.
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
Die Abfrage gibt die Spaltennamen und die Namen aller doppelten Indizes zurück.
Pro Architecture-Händler können die Prüfung auch mit dem Befehl Percona Toolkit [pt-duplicate-key checker](https://www.percona.com/doc/percona-toolkit/LATEST/pt-duplicate-key-checker.html%C2%A0)
ausführen.
Duplizierte Indizes entfernen
Verwenden Sie die SQL DROP INDEX Statement , um doppelte Indizes zu entfernen.
DROP INDEX
Weitere Informationen
Best Practices für die Datenbankkonfiguration für Cloud-Bereitstellungen