Best Practices zum Beheben von Problemen mit der Datenbankleistung
In diesem Artikel wird beschrieben, wie Sie Datenbankprobleme beheben können, die sich negativ auf die Datenbankleistung von Adobe Commerce auf Cloud-Infrastruktur-Sites auswirken.
Betroffene Versionen
Adobe Commerce auf Cloud-Infrastruktur
Identifizieren und Auflösen von lang laufenden Abfragen
Ermitteln Sie, ob Sie langsame MySQL-Abfragen haben. Abhängig von Ihrem Adobe Commerce on Cloud-Infrastrukturplan und damit der Verfügbarkeit von Tools haben Sie folgende Möglichkeiten.
Analysieren von Datenbankabfragen mit MySQL
Sie können MySQL verwenden, um lang laufende Abfragen für jedes Adobe Commerce in Cloud-Infrastrukturprojekt zu identifizieren und aufzulösen.
- Führen Sie die
SHOW \[FULL\] PROCESSLIST
aus. - Wenn Sie Abfragen mit langer Laufzeit sehen, führen Sie MySQL-
EXPLAIN
undEXPLAIN ANALYZE
für jede dieser Abfragen aus, um herauszufinden, wodurch die Abfrage lange ausgeführt wird. - Führen Sie basierend auf den gefundenen Problemen Schritte aus, um die Abfrage zu beheben, damit sie schneller ausgeführt wird.
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 das Percona Toolkit zur Analyse von Abfragen verwenden.
-
Führen Sie den
pt-query-digest --type=slowlog
-Befehl für MySQL-Protokolle mit langsamen Abfragen aus.- Den 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 in der Dokumentation zu Percona Toolkit > pt-querydigest.
-
Führen Sie basierend auf den gefundenen Problemen Schritte aus, um die Abfrage zu beheben, damit sie schneller ausgeführt wird.
Überprüfen, ob alle Tabellen einen Primärschlüssel haben
Die Definition von Primärschlüsseln ist eine Voraussetzung für einen guten Datenbank- und Tabellenentwurf. Primäre Schlüssel bieten die Möglichkeit, eine Zeile in einer Tabelle eindeutig zu identifizieren.
Wenn Sie Tabellen ohne Primärschlüssel haben, verwendet die standardmäßige Datenbank-Engine für Adobe Commerce (InnoDB) den ersten eindeutigen Schlüssel, der nicht null ist, 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 global für alle Tabellen ohne Primärschlüssel zugewiesen. Diese Konfiguration kann zu Konflikten führen, wenn gleichzeitig auf diese Tabellen geschrieben wird. Dies kann zu Leistungsproblemen führen, da die Tabellen auch das Inkrement des globalen ausgeblendeten Primärschlüsselindex gemeinsam nutzen.
Vermeiden Sie diese Probleme, indem Sie einen Primärschlüssel für alle Tabellen definieren, die keinen 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, der ein Primärschlüssel fehlt, einen Primärschlüssel hinzu, indem Sie das
db_schema.xml
(das deklarative Schema) mit einem Knoten ähnlich dem folgenden aktualisieren: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 eines deklarativen Schemas in unserer Entwicklerdokumentation.
Identifizieren und Entfernen doppelter Indizes
Identifizieren Sie alle doppelten Indizes in Ihrer Datenbank und entfernen Sie sie.
Auf doppelte Indizes prüfen
Um nach doppelten Indizes in der Pro- oder Starter-Cloud-Architektur 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.
Kaufleute, die Pro-Architektur verwenden, können den Test auch mit dem [pt-duplicate-key checker](https://www.percona.com/doc/percona-toolkit/LATEST/pt-duplicate-key-checker.html%C2%A0)
-Befehl des Percona Toolkits durchführen.
Doppelte Indizes entfernen
Verwenden Sie die SQL DROP INDEX-Anweisung, um doppelte Indizes zu entfernen.
DROP INDEX
Weitere Informationen
Best Practices für die Datenbankkonfiguration bei Cloud-Bereitstellungen