Migliora le prestazioni sulle chiamate SOAP


13

Ho un problema di prestazioni con Magento 2.1

Nel mio negozio ho 90.000 prodotti. Ho aggiunto questi prodotti al sapone. Quando l'ho fatto ci sono voluti circa 7 secondi per ogni articolo (prodotto?) (Richiesta> Risposta). In sintesi, sono stati necessari alcuni giorni per avviare tutti i prodotti.

Ora tutti i prodotti sono nel negozio. Per alcune settimane devo aggiornare alcune cose sugli articoli (prodotti). Quando lo faccio di nuovo con il sapone, ci vuole la stessa durata. Quando faccio aggiornamenti il ​​negozio è inutilizzabile. Una richiesta di esempio e una risposta sono qui: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

Il mio server ha una CPU a 12 core, 24 GB RAM e SSD. Funziona con Ubuntu 16.04 con Apache2 PHP7-fpm e MYSQL.

Quando guardo il processo di aggiornamento vedo che 5 core con MySQL sono al 100% PHP funziona un po 'e il resto è inattivo. La ram è solo una piccola quantità utilizzata iotopdice che il mio SSD è annoiato.

Ho visto le prestazioni del database e ho visto che Magento ha generato migliaia di comandi nel database. Va bene?

Quando lo aggiorno con l'importazione CSV Magento è molto più veloce.

Cosa posso fare per accelerare questo Magento2? In questa situazione è impossibile lavorare bene con questo negozio.


Quali estensioni stai usando? Il problema può essere correlato con una delle tue estensioni.
Bunyamin Inan,

@tadeus Hai risolto i tuoi problemi di velocità negli ultimi 2 anni? In caso contrario, DISCLAIMER: sono l'autore del contenuto del sito Web menzionato nel mio profilo, profilo di rete in cui sono disponibili script di utilità gratuiti per migliorare le prestazioni e altri servizi di analisi.
Wilson Hauck,

Risposte:


1

Importazione in blocco

la chiave è usare l'importazione in lotti, come hai menzionato tu stesso:

Quando lo aggiorno con l'importazione CSV Magento è molto più veloce.

Prendi in considerazione l'idea di ripensare l'API SOAP e modificarla in una modalità bulk, ad esempio puoi creare un middleware che accetti i dati del tuo prodotto e generi un file CSV che può essere successivamente inserito in Magento.

Ci sono alcune estensioni di terze parti che ti aiutano.

Consigli generali sulle prestazioni

Puoi provare ad accelerare Magento stesso, ma otterrai un aumento del ~ 1-10% da ogni miglioramento, quando ne fai molti di essi il vantaggio si moltiplica:

  1. Assicurati di non avere un codice inefficiente
    1. Verifica che il tuo codice non generi avvisi / errori / avvisi
    2. Verifica di non avere costosi listener di eventi nelle estensioni installate (da terze parti o da te stesso).
  2. Una volta terminata la rimozione delle notifiche e degli avvisi, considerare la disabilitazione della registrazione.
  3. Controlla quale Magento e anche le estensioni di terze parti non stai utilizzando e puoi disabilitare vedi Quale modulo posso disabilitare in Magento 2? per riferimento.
  4. Nel caso in cui il tuo server di database si trovi sullo stesso computer dell'applicazione Magento, assicurati di utilizzare il socket linux invece della connessione TCP / IP.
  5. Nel caso in cui il tuo server di database non si trovi sullo stesso computer dell'applicazione Magento, assicurati che PHP non debba eseguire la risoluzione DNS ogni volta che esegue una query sul database.
  6. Controlla i consigli sull'ottimizzazione delle prestazioni del database, l'articolo di percona è già stato menzionato in una delle risposte, controlla anche https://github.com/major/MySQLTuner-perl
  7. Controlla le modalità di indicizzazione magento, passa all'indice nei tempi previsti ed esegui un reindice ogni notte o al termine dell'importazione, non al salvataggio del prodotto. https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

Nel caso in cui sia fatto tutto quanto sopra e hai bisogno di più prestazioni:

  • profila la tua applicazione con xDebug o blackfire, vedi dove sono i colli di bottiglia, cerca di eliminarli.
  • chiedi in giro, ma sii più specifico, spiega cosa stai cercando di migliorare in questo momento.
  • considera di chiedere aiuto a un partner Magento o uno sviluppatore Magento certificato.

0

Il problema qui è che le chiamate SOAP sono molto costose. Se si avvia una richiesta SOAP per aggiungere / modificare / eliminare un prodotto, Magento deve unire molte tabelle per ottenere tutte le informazioni necessarie. Questo comportamento in combinazione con PHP stesso rallenta il numero di prodotti o dati che si desidera elaborare.

Magento stesso consiglia un cluster di server a 5 nodi (1 x DB, 4 x Webserver) per gestire il traffico.

Consiglierei il ridimensionamento in orizzontale, ad esempio con AWS. Ciò potrebbe avere un impatto maggiore sulla tua attività, ma IMHO non sarai in grado di modificare Magento per ottenere prestazioni migliori.

All'interno di AWS, dovresti utilizzare la funzione di un gruppo con scalabilità automatica responsabile del numero di server che avvii. Ogni volta che aggiungi i dati, vengono avviati nuovi server per gestire la pressione. Lo stesso si può fare con AWS RDS (DB Service) molto semplice e veloce.

Nel caso in cui AWS non sia affatto un'opzione, puoi provare a modificare Magento e PHP. Consiglierei di controllare le impostazioni per:


0

Questo link spiega come modificare l'utilizzo della memoria MySQL. Dato che hai così tanta RAM, potresti trarre vantaggio dall'assegnare di più a MySQL. Potrebbe essere una soluzione più semplice e meno costosa ($) della creazione di un server di database dedicato.

https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/

Inoltre potresti trovare utile l'utilità MySQL Workbench per aiutarti con questa modifica e anche per monitorare ciò che MySQL sta facendo in generale. L'utilità è realizzata da Oracle / MySQL; non è un'app shareware casuale.

https://dev.mysql.com/downloads/workbench/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.