Ліворуч WooCommerce 5.5.2: Проблеми з продуктивністю, вирішені через примусове виправлення безпеки

Нещодавно випущений WooCommerce 5.5.2. Цей реліз є продовженням примусового оновлення безпеки, яке виправив уразливість SQL ін’єкцій минулого тижня. Уразливість вплинула на версії 3.3-5.5 плагіна WooCommerce, а також версії 2.5-5.5 плагіна WooCommerce Блоки. Команда випустила патч для більш ніж 90 релізів, і цей патч був розгорнутий як примусове оновлення безпеки через WordPress.org, оскільки вразливість мала потенційну загрозу для мільйонів установок WooCommerce.

Незабаром після установки автоматичних оновлень, багато власників магазинів почали повідомляти про серйозні проблеми з продуктивністю. Деякі користувачі повідомили про помилки бази даних після інсталяції автоматичного оновлення безпеки. Один користувач згадав нескінченний запит, який просто заважав функціонуванню магазину; для інших користувачів подібний запит призвів до збоїв сервера.

Приклад такого запиту:

SELECT SQL_CALC_FOUND_ROWS  wp_posts.*, low_stock_amount_meta.meta_value AS low_stock_amount, MAX( product_lookup.date_created ) AS last_order_date FROM wp_posts  LEFT JOIN wp_wc_product_meta_lookup wc_product_meta_lookup ON wp_posts.ID = wc_product_meta_lookup.product_id  LEFT JOIN wp_postmeta AS low_stock_amount_meta ON wp_posts.ID = low_stock_amount_meta.post_id AND low_stock_amount_meta.meta_key = '_low_stock_amount'  LEFT JOIN wp_wc_order_product_lookup product_lookup ON wp_posts.ID = CASE

WHEN wp_posts.post_type="product" THEN product_lookup.product_id

WHEN wp_posts.post_type="product_variation" THEN product_lookup.variation_id

END WHERE 1=1  AND wp_posts.post_type IN ('product', 'product_variation') AND ((wp_posts.post_status="publish"))

AND wc_product_meta_lookup.stock_quantity IS NOT NULL

AND wc_product_meta_lookup.stock_status IN('instock','outofstock')

AND (

(

low_stock_amount_meta.meta_value > ''

AND wc_product_meta_lookup.stock_quantity <= CAST(low_stock_amount_meta.meta_value AS SIGNED)

)

OR (

(

low_stock_amount_meta.meta_value IS NULL OR low_stock_amount_meta.meta_value <= ''

)

AND wc_product_meta_lookup.stock_quantity <= 2

)

) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC, wp_posts.ID DESC LIMIT 0, 1

Найчастіше страждали ті, у кого було багато продуктів в БД. «У нас величезна продуктова база в 17 000, – сказав один з користувачів. Це був кошмар для нас.

Власники магазинів, на які вплинула ця проблема, за рекомендованими розробниками WooCommerce відкочується до попередніх версій. Вони поділилися тимчасовими обхідними шляхами, щоб відключити проблемний запит на даний момент. WooCommerce не запропонує належного виправлення.

Тиждень тому розробник WooCommerce Адріан Даффелл сказав, що вони знайшли дві причини проблеми:

  1. Повільний запит SQL використовується для отримання продуктів, які є дефіцитні. Цей запит SQL присутній у WooCommerce у кількох випусках.
  2. API REST, пов’язаний із цим запитом SQL, викликано WooCommerce 5.5 в кілька разів частіше, ніж в попередніх версіях.

поєднання цих факторів призвело до низької продуктивності сервера під час WooCommerce 5.5. Fix був випущений в WooCommerce Адміністратор 2.4.4 і в WooCommerce 5.5.2. Користувачі, які використовують обхідні шляхи для вирішення проблеми, можуть відмовитися після оновлення до недавнього випуску.

джерело: wptavern.com

Прокоментувати

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *