
Оскільки архітектура Magento структурована таким чином, що дані зберігаються в різних таблицях бази даних, усі дані необхідно переіндексувати, коли ви вносите будь-які зміни до свого сховища. І хоча ви можете скористатися переіндексувати Magento через CLI або навіть адміністративна панель , цей процес все одно займає багато часу.
У цьому посібнику ми хочемо допомогти вам оптимізувати процес.
Оскільки індексатор категорії каталогу товарів виконується найдовше, ми візьмемо його як приклад для цієї статті. Отже, ви можете оптимізувати час виконання Переіндексація Magento , змінивши за допомогою batch_size індексатора категорії каталогу товарів .
Однак, щоб краще зрозуміти, як це працює, давайте визначимо, що таке розмір пакета та чому його потрібно змінювати.
Як працює Magento Reindex?
Розмір пакета – це кількість індексів, які будуть оброблятися одночасно, один запит MySQL.
Уявіть, що у вас є магазин з 40 тисячами товарів, і ви вносите деякі зміни, такі як масове оновлення цін , до всіх ваших товарів. Це призведе до анулювання 40 тисяч індексів.
Magento розділяє дані для переіндексації наступним чином:
Number of batches = number of indexes / batch size
Однак пакетна обробка доступна не для всіх індексаторів. Перевірте доступні індексатори та їхній розмір пакета за замовчуванням у цій таблиці:
| Назва індексу | Значення за замовчуванням |
| catalog_product_price | 5000 |
| cataloginventory_stock | 200 |
| catalog_category_product | 100000 |
| catalog_product_attribute | 1000 |
Розглянемо наступний приклад та обчислимо розмір пакета для catalog_product_price .
- Розмір пакета за замовчуванням для catalog_product_price - 5000
- Кількість товарів - 40000
В результаті:
Кількість пакетів = 40000/5000 = 8 пакетів
Якщо ви запустите reindex, Magento обробить першу з 8 пакетів, потім другу і так далі. Отже, пакети будуть оброблятися один за одним, і деякі інші запити, такі як збереження товару, можуть мати шанс виконатися.
Тепер розрахуємо розмір пакета для індексатора catalog_category_price:
- Розмір пакета за замовчуванням для catalog_category_product - 100000
- Кількість товарів - 40000
В результаті:
Кількість пакетів = 40000/100000 = 0.4 = 1 пакет
Отже, у нас є один пакет. Це означає, що всі 40 тисяч індексів будуть оброблені одночасно, що перевантажує вашу базу даних і призводить до помилки проблеми з тупиками .
Як оптимізувати переіндексацію Magento 2?
Враховуючи наведені нами приклади, краще зменшити 'batch_size' для 'catalog_category_product' та використовувати значення до 5000.
Для цього додайте наступні рядки до вашого файлу app/etc/env.php:
'indexer' => [
'batch_size' => [
'catalog_category_product' => 1000 ] ],
Щоб оптимізувати інші індексатори, ви можете скористатися документацією Magento .