Следующий SQL-запрос вызывает взаимные блокировки на производственной базе данных MySQL на сайте WordPress с большой нагрузкой.
SELECT
lessons.ID AS lesson_id,
resultmeta.meta_value AS status,
lessons.post_title AS title,
lessons.post_name AS slug,
count(resultmeta.meta_value) AS nr_of_results
FROM
mv_posts AS lessons
LEFT JOIN
mv_posts AS results
ON
results.post_parent = lessons.ID AND
results.post_type = 'we_result' AND
results.post_author IN($students_string)
LEFT JOIN
mv_postmeta AS resultmeta
ON
results.ID = resultmeta.post_id AND
resultmeta.meta_key = 'we_result_status_code'AND
results.post_author IN($students_string)
WHERE
lessons.post_type = 'we_lesson' AND
lessons.post_status = 'publish' AND
lessons.ID IN($lessons_id)
GROUP BY
lessons.ID,
resultmeta.meta_value;
С точно такой же БД в тестовой среде запрос выполняется за 0,005 секунды. Таблица mv_postmeta содержит более 3 миллионов строк, а таблица mv_post содержит более 1 миллиона строк.
Вероятно, одновременные вставки вызывают эту проблему и, возможно, перегрузку кеша БД.
Я пытался сделать READ COMMITED через WordPress wp_query безуспешно.
У кого-нибудь есть совет для этого? Сделки закрывают сайт примерно на 2 минуты.
Задача ещё не решена.
Других решений пока нет …