MySQL-flaskhalsar med hög belastning i Adobe Commerce i molninfrastruktur
I det här avsnittet diskuteras en lösning när hög belastning från MySQL orsakar ett problem med prestandaflaskhalsar i Adobe Commerce om molninfrastruktur.
Berörda produkter och versioner
- Adobe Commerce on cloud infrastructure 2.x.x, Pro accounts.
Förutsättningar
- ECE-verktyg version 2002.0.16 och senare
- New Relic APM-tjänst (Ditt Adobe Commerce-konto för molninfrastruktur innehåller programvaran för New Relic APM-tjänsten tillsammans med en licensnyckel.)
Mer information om New Relic APM-tjänsten och dess konfiguration med ditt Adobe Commerce-konto för molninfrastruktur finns på New Relic-tjänster och Introduktion till New Relic APM.
Problem
Steg för att se om problemet påverkar dig
-
I översiktsdiagrammet för New Relic APM ska du kontrollera den första indikationen på att MySQL har blivit en flaskhals. Se exempelbilden nedan där MySQL har blivit en flaskhals och tar större delen av webbtransaktionstiden:
Lägg märke till hur den röda streckade linjen i bilden visar en märkbar uppåtgående trend i MySQL-webbtransaktionerna och sedan toppar på ännu högre nivåer.
-
Härifrån kan du gå till Databasskärmen där du kan se den andra indikationen på hög genomströmning eller långsamma
SELECT
-frågor i MySQL, och i exempelbilden nedan kan du se när du sorterar efter Den mest tidskrävande är din butik långsam påSELECT
MySQL-frågor.
Analysera långsamma transaktioner i New Relic APM. Om du ser ett stort antal frågor eller ett högt tryck på en MySQL-databas kan du sprida belastningen över olika noder genom att aktivera SLAVE
-anslutningar.
Orsak
Din Adobe Commerce-butik i molnet har hög genomströmning eller är långsam på SELECT
MySQL-frågor.
Lösning
https://console.adobecommerce.com/<owner-user-name>/<project-ID>/<environment-name>
. Klicka på SSH. Om det finns fler än tre noder är du i en skalad arkitektur. Om du aktiverar Redis Slave Reads för skalad arkitektur får kunden felmeddelanden om att Redis-anslutningar inte kan ansluta. Detta har att göra med hur klustren har konfigurerats för att bearbeta Redis-anslutningar. Redis Slaves är fortfarande aktivt men kommer inte att användas för Redis-läsningar. Vi rekommenderar att den skalade arkitekturen använder Adobe Commerce 2.3.5 eller senare och implementerar den nya Redis back-end-konfigurationen och implementerar L2-cachning för Redis.Om du får dessa två indikationer kan det hjälpa att aktivera SLAVE
anslutningar för MySQL-databasen och Redis att sprida ut belastningen över olika noder.
Adobe Commerce kan läsa flera databaser eller Redis asynkront. Uppdaterar filen .magento.env.yaml
genom att ange true
värdena MYSQL_USE_SLAVE_CONNECTION
och REDIS_USE_SLAVE_CONNECTION
till att använda en skrivskyddad-anslutning till databasen för att ta emot skrivskyddad trafik på en icke-huvudnod. Detta förbättrar prestanda genom lastbalansering eftersom bara en nod behöver hantera trafik med läs- och skrivbehörighet. Ange som false
om du vill ta bort alla befintliga skrivskyddade anslutningsmatriser från filen env.php
.
Steg
-
Redigera din
.magento.env.yaml
-fil och lägg till följande innehåll:Mer information finns i Distribuera variabler i DevDocs.
-
Genomför ändringarna och gör ändringarna mer omfattande.
-
När du gör ändringar initieras en ny distributionsprocess. När distributionen är klar bör du nu ha konfigurerat Adobe Commerce på molninfrastrukturinstansen så att den använder slavanslutningar.
Vanliga frågor
Nedan beskrivs de vanligaste frågorna du kan ställa när du funderar på att använda Slave Connections-funktionen för din Adobe Commerce i molninfrastrukturbutiken.
-
Finns det några kända problem eller begränsningar för att använda slavanslutningar? Vi har inga kända problem med att använda slavanslutningar. Se bara till att du använder det senaste uppdaterade verktygspaketet. Instruktioner finns här för hur du uppdaterar ditt verktygspaket.
-
Finns det någon extra fördröjning genom att använda slavanslutningar? Ja, fördröjningen mellan AZ (cross-Availability Zones) är högre och minskar prestanda för en Adobe Commerce på en molninfrastrukturinstans om instansen inte är överbelastad och kan bära hela belastningen. Men om instansen är överlastad kan master-slave hjälpa till med prestandan genom att sprida belastningen på MySQL-databasen eller Redis över olika noder.
För kluster som inte är överbelastade - Slavanslutningar saktar ned prestanda med 10-15 %, vilket är en av orsakerna till att det inte är standard.
Men i överlagrade kluster ökar prestandan eftersom dessa 10-15 % minskas genom att belastningen minskas med trafiken.
-
Ska jag aktivera de här inställningarna för min butik? Om du har hög belastning eller förväntar dig hög belastning på MySQL-databasen eller Redis måste du definitivt aktivera slavanslutningar. För en vanlig kund med genomsnittlig trafik är detta inte en optimal inställning som ska aktiveras.
Relaterad läsning
I vår utvecklardokumentation: