У меня следующая ситуация:
Примерно 5 раз в неделю (не связанные с какой-либо конкретной ситуацией, такой как очистка кэша, скачок трафика), некоторые запросы зависают при отправке данных ( show processlist
):
> SELECT `main_table`.`entity_id`, `main_table`.`level`, `main_table`.`path`, `main_table`.`position`,
> `main_table`.`is_active`, `main_table`.`is_anchor`,
> `main_table`.`name`, `url_rewrite`.`request_path` FROM
> `catalog_category_flat_store_30` AS `main_table`
> LEFT JOIN `core_url_rewrite` AS `url_rewrite` ON url_rewrite.category_id=main_table.entity_id AND
> url_rewrite.is_system=1 AND url_rewrite.product_id IS NULL AND
> url_rewrite.store_id='30' AND url_rewrite.id_path LIKE 'category/%'
> WHERE (path LIKE '1/2/%') AND (main_table.store_id = '30') AND
> (is_active = '1') AND (include_in_menu = '1') ORDER BY name ASC
второй:
> SELECT `main_table`.`entity_id`, main_table.`name`, main_table.`path`,
> `main_table`.`is_active`, `main_table`.`is_anchor`,
> `main_table`.`manually`, `url_rewrite`.`request_path` FROM
> `catalog_category_flat_store_10` AS `main_table` LEFT JOIN
> `core_url_rewrite` AS `url_rewrite` ON
> url_rewrite.category_id=main_table.entity_id AND
> url_rewrite.is_system=1 AND url_rewrite.product_id IS NULL AND
> url_rewrite.store_id='10' AND url_rewrite.id_path LIKE 'category/%'
> WHERE (main_table.is_active = '1') AND (main_table.include_in_menu =
> '1') AND (main_table.path like '1/2/1528/1569/%') AND (`level` <= 4)
> ORDER BY `main_table`.`position` ASC
Эти запросы связаны с созданием меню навигации. Они бегают без проблем и очень быстро все время.
Несколько раз в месяц некоторые другие запросы застревают на данных об отмене или ожидают блокировки таблицы:
INSERT INTO `catalogsearch_result` SELECT 316598 AS `query_id`, `s`.`product_id`, MATCH (s.data_index) AGAINST ('STRING HERE' IN BOOLEAN MODE) AS `relevance` FROM `catalogsearch_fulltext` AS `s`
INNER JOIN `catalog_product_entity` AS `e` ON e.entity_id = s.product_id WHERE (s.store_id = 38) AND (MATCH (s.data_index) AGAINST ('STRING HERE' IN BOOLEAN MODE)) ON DUPLICATE KEY UPDATE `relevance` = VALUES(`relevance`)
(связанный поиск)
Дополнительная информация:
- core_url_rewrite - 3M записей (30 сайтов, 100 тыс. продуктов)
- catalog_category_flat_store_ * - 2000 записей (использование плоских категорий включено)
Это выполняется на установке с использованием vmware на каком-то огромном оборудовании (мастер mysql имеет 8 выделенных ядер и 64 ГБ ОЗУ, SSD-диски в хранилище SAN), mysql был оптимизирован и постоянно отслеживается. В прошлом были некоторые проблемы, связанные с вводом / выводом (некоторые из-за связи между серверами и хранилищем SAN).
Мы не могли точно определить проблему, потому что при работе на голом железе (без виртуализации, с одинаковыми настройками) такого не бывает никогда, в условиях высокой нагрузки (при выполнении сценариев осады + нагрузочного тестирования, без кеша).
У кого-нибудь еще есть подобные проблемы?
ОБНОВИТЬ:
Поиск reindexAll был перемещен во временную таблицу (поэтому он не блокирует основную таблицу, используемую производством, а затем переименовывает таблицу tmp). Таким образом, процесс переиндексации не мешает посетителям, ищущим сайт. https://github.com/magendooro/magento-fulltext-reindex слава Carco
Ответы:
Это выглядит как основная ошибка / регрессия, которую мы видели в 1.7, когда кеш блоков и сборов не работал эффективно для меню навигации (
catalog/navigation/top.phtml
).Вы можете проверить, удалив его, или просто временно записать вывод в файл с помощью
ob_start
и передать его из статического файла / memcache.Кроме того, аппаратное обеспечение, которое вы используете, не звучит огромно и выглядит не так, как указано для размера вашего магазина. Там, вероятно, также есть узкое место ввода / вывода - хранилище SAN + перегруженная сеть = низкая производительность.
-
В качестве грубого решения вы можете настроить класс блока для навигации (дампа
get_class($this)
),top.phtml
чтобы идентифицировать его.Это разрешит кэширование всего сайта без кэширования на уровне категории, которое вызвала новая версия. Также стоит удалить
is_active
класс из средства визуализации дерева, если вы сделаете это, чтобы избежать появления выбранных случайных элементов меню (и вместо этого реализовать альтернативу JS).источник
Заменить функцию на
Приложение / код / ядро / Mage / Каталог / Helper / Категория / URL / Rewrite.php:
источник
В нашем случае все сводилось к этому медленному запросу:
из приложения / кода / ядра / Маг / Карта сайта / Модель / Ресурс / Каталог / Product.php .
Зависает из-за оператора category_id IS NULL . MySQL по какой-то причине не использовал индекс.
Удаление category_id IS NULL и установка id_path REGEXP '^ product / [0-9] + $' устранили проблему.
Скопируйте приложение / code / core / Mage / Catalog / Helper / Product / Url / Rewrite.php в приложение / code / local / Mage / Catalog / Helper / Product / Url / Rewrite.php и добавьте эту функцию:
Затем скопируйте app / code / core / Mage / Sitemap / Model / Resource / Catalog / Product.php в app / code / local / Mage / Sitemap / Model / Resource / Catalog / Product.php и измените строку 72 на:
Первоначально взято с https://www.goivvy.com/blog/solved-magento-stuck-generating-google-sitemap-large-website
источник