Некоторые продукты сохраняются очень медленно (30 секунд)
Вот снимок экрана от профилировщика:
Я включил Slow Query log в mysql и нашел этот запрос:
SELECT COUNT( DISTINCT ID )
FROM wpmf_posts p
LEFT JOIN (
SELECT object_id
FROM wpmf_term_relationships
WHERE term_taxonomy_id
IN ( 7 )
) AS exclude_join ON exclude_join.object_id = p.ID
INNER JOIN (
SELECT object_id
FROM wpmf_term_relationships
INNER JOIN wpmf_term_taxonomy
USING ( term_taxonomy_id )
WHERE term_id
IN ( 4246, 4247, 4254, 4257, 4263, 4280, 4290, 4335, 4375, 4397, 4486, 5114 )
) AS include_join ON include_join.object_id = p.ID
WHERE 1 =1
AND p.post_status = 'publish'
AND p.post_type = 'product'
AND exclude_join.object_id IS NULL
LIMIT 0 , 30
, который возвращает 4799 и занимает 27 секунд:
# Time: 190127 8:38:29
# User@Host: lfytcoil_uprdb[lfytcoil_uprdb] @ localhost []
# Query_time: 27.287704 Lock_time: 0.000076 Rows_sent: 1 Rows_examined: 483196982
Любая идея, какова цель этого запроса?
Это wpmf_term_taxonomy
с идентификатором product_visibility
count
показывает 31234
Это сайт WooCommerce с 10717 товарами,
Я подозреваю, что WooCommerce слишком много продуктов для обработки.
ПРИМЕЧАНИЕ: после запуска delete FROM
wpmf_term_relationships where
term_taxonomy_id = 7
, который удалил 31234, сохранение займет всего 2 сек. Мой вопрос:
Разве WooCommerce не может обработать 10717 товаров?
Есть ли способ как-то улучшить save
?например, отключив этот запрос?или путем кеширования результата?или улучшить структуру БД?или установить какие-нибудь умные модули?
Я замечаю звонок на wp_update_term_count
, кажется, что если я отключу этот звонок, то проблема будет решена, какие могут быть побочные эффектыэто?