SOAP çağrılarında performansı artırma


13

Magento 2.1 ile ilgili bir performans sorunum var

Dükkanımda 90.000 ürün var. Bu ürünleri sabuna ekledim. Bunu yaptığımda her makale (ürün?) İçin yaklaşık 7 saniye sürdü (İstek> Yanıt). Özetle, tüm ürünleri başlatmak birkaç gün sürdü.

Şimdi tüm ürünler dükkanda. Birkaç hafta boyunca, makalelerdeki (ürünlerdeki) bazı şeyleri güncellemem gerekiyor. Bunu tekrar sabunla yaptığımda aynı süreyi alır. Güncellemeler yaptığımda dükkan kullanılamaz. Örnek bir istek ve yanıt: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

Sunucumda 12 çekirdekli CPU, 24 GB RAM ve SSD var. Apache2 PHP7-fpm ve MYSQL ile çalışan Ubuntu 16.04.

Güncelleme işlemini izlediğimde MySQL ile 5 çekirdeğin% 100 PHP'de olduğunu ve biraz çalıştığını ve geri kalanının boşta olduğunu görüyorum. Koç, kullanılan küçük bir miktar iotopSSD'nin sıkıldığını söylüyor.

Veritabanı performansını izledim ve Magento'nun veritabanına binlerce komut ekleme işlemini başlattığını gördüm. Bu tamam mı?

Magento CSV içe aktarma ile güncellediğimde çok daha hızlı.

Bu Magento2'yi hızlandırmak için ne yapabilirim? Bu durumda bu dükkanla iyi çalışmak imkansız.


Hangi uzantıları kullanıyorsunuz? Sorun, uzantılarınızdan biriyle ilgili olabilir.
Bunyamin İnan

@tadeus Hız sorunlarınızı son 2 yılda çözdünüz mü? Değilse, YASAL UYARI: Ben profilimde adı geçen web sitesinin içerik yazarı, Performansı ve diğer Analiz Hizmetlerini iyileştirmek için ücretsiz Yardımcı Program Komutlarımıza sahip olduğumuz Ağ profili.
Wilson Hauck

Yanıtlar:


1

Toplu içe aktarma

anahtar, sizin belirttiğiniz gibi toplu içe aktarmayı kullanmaktır:

Magento CSV içe aktarma ile güncellediğimde çok daha hızlı.

SOAP API'nizi yeniden düşünmeyi ve toplu bir modda değiştirmeyi düşünün; örneğin, ürün verilerinizi kabul edecek ve daha sonra Magento'ya beslenebilecek bir csv dosyası oluşturacak bazı ara katman yazılımı oluşturabilirsiniz.

Bu konuda yardımcı olan 3. taraflardan bazı uzantılar var.

Genel performans önerileri

Magento'nun kendisini hızlandırmayı deneyebilirsiniz, ancak her iyileştirmeden ~% 1-10 oranında artış elde edersiniz, bunların çoğunu yaptığınızda fayda çoğalır:

  1. Verimsiz kodunuz olmadığından emin olun
    1. Kodunuzun bildirimler / hatalar / uyarılar üretmediğini kontrol edin
    2. Yüklü uzantılarda pahalı olay dinleyicileri bulunmadığından emin olun (3. taraftan veya kendinizden).
  2. Bildirimleri ve uyarıları kaldırmayı tamamladıktan sonra günlüğe kaydetmeyi devre dışı bırakmayı düşünün.
  3. Hangi Magento ve ayrıca 3. taraf uzantılarını kullanmadığınızı kontrol edin ve devre dışı bırakabilirsiniz bkz . Magento 2'de hangi modülü devre dışı bırakabilirim? referans için.
  4. Veritabanı sunucunuzun Magento uygulamasıyla aynı makinede olması durumunda, TCP / IP bağlantısı yerine linux soket kullandığınızdan emin olun.
  5. Veritabanı sunucunuzun Magento uygulamasıyla aynı makinede olmaması durumunda - veritabanını her sorguladığında PHP'nin DNS çözümlemesi yapmasına gerek olmadığından emin olun.
  6. Veritabanı performans ayarlama önerisini kontrol edin, zaten cevaplardan birinde percona makalesinden bahsedildi, ayrıca https://github.com/major/MySQLTuner-perl
  7. Magento indeksleme modlarını kontrol edin, programa göre dizine geçin ve ürün kaydetme işleminde değil, her gece veya içe aktarma tamamlandıktan sonra yeniden dizin oluşturun. https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

Yukarıdakilerin hepsinin yapılması ve daha fazla performansa ihtiyacınız varsa:

  • uygulamanızı xDebug veya blackfire ile profilleyin, şişe boyunlarının nerede olduğunu görün, ortadan kaldırmaya çalışın.
  • sormak, ancak daha spesifik olmak, şu anda tam olarak neyi geliştirmeye çalıştığınızı açıklayın.
  • bir Magento partnerinden veya sertifikalı bir Magento geliştiriciden yardım almasını isteyin.

0

Buradaki sorun, SOAP Çağrılarının çok pahalı olmasıdır. Bir ürün eklemek / düzenlemek / silmek için bir SOAP İsteği başlatırsanız, Magento gerekli tüm bilgileri almak için birçok tabloya katılmalıdır. PHP ile birlikte bu davranış, işlemek istediğiniz ürün veya veri sayısını yavaşlatır.

Magento, trafiği işlemek için 5 düğümlü bir sunucu kümesi (1 x DB, 4 x Web sunucusu) önerir.

Yatay olarak ölçeklendirmeyi tavsiye ederim, örneğin AWS ile. Bu, işletmeniz üzerinde daha büyük bir etkiye sahip olabilir, ancak IMHO, daha iyi performans göstermesi için Magento'yu değiştiremezsiniz.

AWS içinde, başlattığınız sunucu sayısından sorumlu bir otomatik ölçeklendirme grubunun Özelliğini kullanmalısınız. Verileri her eklediğinizde, baskıyı kaldıracak yeni sunucular başlatılır. Aynı işlem AWS RDS (DB Servisi) ile çok kolay ve hızlı yapılabilir.

AWS'nin bir seçenek olmaması durumunda, Magento ve PHP'yi değiştirmeyi deneyebilirsiniz. Ayarları kontrol etmenizi tavsiye ederim:


0

Bu bağlantı, MySQL bellek kullanımının nasıl değiştirileceğini açıklar. Çok fazla RAM'iniz olduğundan MySQL'e daha fazla veri ayırmaktan faydalanabilirsiniz. Bu, özel bir veritabanı sunucusu oluşturan daha kolay ve daha az maliyetli ($) bir çözüm olabilir.

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

Ayrıca MySQL Workbench yardımcı programını bu tweaking ve ayrıca MySQL'in genel olarak ne yaptığını izlemenize yardımcı olmak için yararlı bulabilirsiniz. Yardımcı program Oracle / MySQL tarafından yapılmıştır; bazı rastgele shareware uygulaması değil.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.