Чому мої SOAP v2 WS-I дзвонять так повільно (7-10 сек. За оновлення продукту)?


16

Ми використовуємо API Magento SOAP v2 з WS-I.

Проблема полягає в тому, що дзвінки SOAP надзвичайно повільні (7-10 секунд на продукт!). Ми викликаємо каталогProductUpdate без зображень. Сам магазин працює добре, просто дзвінок SOAP повільний. Ми активували кеш і деактивували індекс для підвищення продуктивності (що допомагає у багатьох інших магазинах, коли імпорт SOAP був повільним).

Я поміщаю журнали-повідомлення в різні файли, щоб дізнатися, куди йде не так. Це комбінований журнал функціональних викликів та відправок:

20.03.2013 14:17:43: Mage_Api_V2_SoapController
20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch_api_v2_soap_index
20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch_api
20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch
20.03.2013 14:17:43: dispatchEvent: controller_front_send_response_before
20.03.2013 14:17:43: dispatchEvent: http_response_send_before
20.03.2013 14:17:43: dispatchEvent: controller_front_send_response_after
20.03.2013 14:17:43: Mage::run
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: core_collection_abstract_load_before
20.03.2013 14:17:51: dispatchEvent: core_collection_abstract_load_after
20.03.2013 14:17:51: dispatchEvent: core_collection_abstract_load_before
20.03.2013 14:17:51: dispatchEvent: core_collection_abstract_load_after
20.03.2013 14:17:51: dispatchEvent: core_collection_abstract_load_before
20.03.2013 14:17:51: dispatchEvent: core_collection_abstract_load_after
20.03.2013 14:17:51: dispatchEvent: controller_front_init_before
20.03.2013 14:17:51: dispatchEvent: controller_front_init_routers
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: model_load_after
20.03.2013 14:17:51: dispatchEvent: core_abstract_load_after
20.03.2013 14:17:51: Mage_Core_Controller_Varien_Front
20.03.2013 14:17:51: Mage_Core_Controller_Varien_Front
20.03.2013 14:17:51: Mage_Core_Controller_Varien_Router_Standard
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: core_locale_set_locale
20.03.2013 14:17:51: dispatchEvent: controller_action_predispatch
20.03.2013 14:17:51: dispatchEvent: controller_action_predispatch_api
20.03.2013 14:17:51: dispatchEvent: controller_action_predispatch_api_v2_soap_index
20.03.2013 14:17:51: Mage_Core_Controller_Varien_Action
20.03.2013 14:17:51: Mage_Api_Model_Server
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: Mage_Api_Model_Server_Handler_Abstract
20.03.2013 14:17:51: Neues Update: 2110000438920 
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: model_load_after
20.03.2013 14:17:51: dispatchEvent: core_abstract_load_after
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: model_load_before
20.03.2013 14:17:51: dispatchEvent: catalog_product_load_before
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: model_load_after
20.03.2013 14:17:51: dispatchEvent: catalog_product_load_after
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: prepareDataForSave Dauer: 0.75447800 1363789071-0.77473800 1363789071=0.02026
20.03.2013 14:17:51: dispatchEvent: catalog_product_validate_before
20.03.2013 14:17:51: dispatchEvent: catalog_product_validate_after
20.03.2013 14:17:51: dispatchEvent: application_clean_cache
20.03.2013 14:17:51: dispatchEvent: model_save_before
20.03.2013 14:17:51: dispatchEvent: catalog_product_save_before
20.03.2013 14:17:51: dispatchEvent: model_load_after
20.03.2013 14:17:51: dispatchEvent: core_abstract_load_after
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: catalog_product_media_save_before
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
20.03.2013 14:17:51: dispatchEvent: application_clean_cache
20.03.2013 14:17:51: dispatchEvent: model_save_after
20.03.2013 14:17:51: dispatchEvent: catalog_product_save_after
20.03.2013 14:17:51: dispatchEvent: model_save_after
20.03.2013 14:17:52: dispatchEvent: cataloginventory_stock_item_save_after
20.03.2013 14:17:52: dispatchEvent: resource_get_tablename
20.03.2013 14:17:52: dispatchEvent: core_collection_abstract_load_before
20.03.2013 14:17:52: dispatchEvent: core_collection_abstract_load_after
20.03.2013 14:17:52: dispatchEvent: resource_get_tablename
20.03.2013 14:17:52: dispatchEvent: model_load_before
20.03.2013 14:17:52: dispatchEvent: core_abstract_load_before
20.03.2013 14:17:52: dispatchEvent: resource_get_tablename
20.03.2013 14:17:52: dispatchEvent: model_load_after
20.03.2013 14:17:52: dispatchEvent: core_abstract_load_after
20.03.2013 14:17:52: dispatchEvent: start_process_event_cataloginventory_stock_item_save
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: model_save_before
20.03.2013 14:17:52: dispatchEvent: core_abstract_save_before
20.03.2013 14:17:52: dispatchEvent: resource_get_tablename
20.03.2013 14:17:52: dispatchEvent: resource_get_tablename
20.03.2013 14:17:52: dispatchEvent: model_save_after
20.03.2013 14:17:52: dispatchEvent: core_abstract_save_after
20.03.2013 14:17:52: dispatchEvent: end_process_event_cataloginventory_stock_item_save
20.03.2013 14:17:52: dispatchEvent: start_index_events_catalog_product_mass_action
20.03.2013 14:17:52: dispatchEvent: end_index_events_catalog_product_mass_action
20.03.2013 14:17:52: dispatchEvent: resource_get_tablename
20.03.2013 14:17:52: dispatchEvent: core_collection_abstract_load_before
20.03.2013 14:17:52: dispatchEvent: core_collection_abstract_load_after
20.03.2013 14:17:52: dispatchEvent: start_process_event_catalog_product_save
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: index_process_change_status
20.03.2013 14:17:52: dispatchEvent: model_save_before
20.03.2013 14:17:52: dispatchEvent: core_abstract_save_before
20.03.2013 14:17:52: dispatchEvent: model_save_after
20.03.2013 14:17:52: dispatchEvent: core_abstract_save_after
20.03.2013 14:17:52: dispatchEvent: end_process_event_catalog_product_save
20.03.2013 14:17:52: dispatchEvent: model_save_commit_after
20.03.2013 14:17:52: dispatchEvent: core_abstract_save_commit_after
20.03.2013 14:17:52: dispatchEvent: model_save_commit_after
20.03.2013 14:17:52: dispatchEvent: cataloginventory_stock_item_save_commit_after
20.03.2013 14:17:52: dispatchEvent: model_save_commit_after
20.03.2013 14:17:52: dispatchEvent: core_abstract_save_commit_after
20.03.2013 14:17:52: dispatchEvent: model_save_commit_after
20.03.2013 14:17:52: dispatchEvent: catalog_product_save_commit_after
20.03.2013 14:17:52: update Dauer: 0.02026

Цікава частина:

20.03.2013 14:17:43: Mage::run
20.03.2013 14:17:51: dispatchEvent: resource_get_tablename
...
20.03.2013 14:17:51: Mage_Core_Controller_Varien_Front

Завжди є 7-10 секунд між Mage::runі наступним викликом події / функції Mage_Core_Controller_Varien_Front. Будь-які ідеї, що тут може піти не так?

У нас однакова проблема з іншим магазином (на іншому сервері, інший клієнт) з тими ж налаштуваннями, де оновлення займає 15 секунд.


Ви намагалися налагодити час завантаження конфігурації? Це здається найбільш вірогідною причиною затримки
— Петро Джамбазов

Чи можете ви пояснити, що ви маєте на увазі під "налагодженням часу завантаження налаштування"?
— Anna Völkl

Я думаю, що Петро говорить про час, необхідний для складання дерева конфігураційних вузлів.
— Маттіас Зейс

Так, я маю на увазі час, необхідний для завантаження Magento до того, як буде оброблений фактичний запит. Крім того, чому Mage :: запускається в журнал взагалі? Я не бачу такого дзвінка в api.php
— Петро Джамбазов

Нижче у мене є короткий підказник щодо ефективності, але якщо ви / ваші розробники зацікавлені отримати глибину API, ця серія API детально висвітлює відправлення та може допомогти відстежити проблеми з продуктивністю: alanstorm.com/category/magento# magento_api
— Alan Storm

Відповіді:


17

У вас налаштування PHP для кешування файлів WSDL? SoapServerРеалізація PHP (використовувана Magento) потребує вивчення файлу WSDL хоча б один раз під час виклику SOAP, іноді більше одного разу. Це може створити експоненціальне зростання у вашому часі запиту. Перевірте налаштування на

System -> Configuration -> Magento Core Api -> Enable WSDL Cache

і переконайтесь, що його встановлено так. Це дозволить PHP кешувати файл WSDL, що повинно покращити вашу ефективність.


3
Я також працюю над тим самим проектом, тому знаю, що так, ми вже включили кеш WSDL. Це зробило приблизно 1 секунду різниці, але це зовсім не так, враховуючи, що весь виклик оновлення займає 8-10 секунд ...
— Daniel Lang

2
Право ввімкнути кеш WSDL у програмі Backend, встановлено на "Так".
— Anna Völkl

Незважаючи на те, що це було не справжнє рішення, я обираю цю відповідь, щоб закрити питання.
— Anna Völkl

Це дозволило мені від 30 секунд зробити оновлення до 4 секунд. Виграти.
— dgig
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.