gpt4 book ai didi

mysql - Category/Flat.php 中的 Magento URL 索引器正在进行 joinLeft 慢速查询导致站点中断

转载 作者:行者123 更新时间:2023-11-28 23:12:14 25 4
gpt4 key购买 nike

软件:Magento 社区启用平面类别索引

问题描述:当我运行完整的 URL 索引时,需要很长时间才能完成,据我所知,在某些情况下这可能是正常的。这不是我要问的问题。当索引器运行时, block 缓存会不断失效。发生这种情况时,Magento 会尝试从平面类别表重建菜单,同时加入 url 重写表。这是核心文件的一部分Mage/Catalog/Model/Resource/Category/Flat.php

当索引器运行时,此查询会反复出现在 mysql 客户端连接中。

SELECT `main_table`.`entity_id`, main_table.`name`, main_table.`path`, `main_table`.`is_active`, `main_table`.`is_anchor`, `url_rewrite`.`request_path`, `main_table`.`url_override`, `main_table`.`display_subcategories` 
FROM `catalog_category_flat_store_19` 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='19' 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/1877/%') AND (`level` <= 3)
ORDER BY `main_table`.`position` ASC

由于 joinLeft,此查询非常慢。这个 Join 在上面提到的文件中定义。当索引器正在运行时,此查询会超时。服务器上建立的连接都试图运行相同的查询以重建导航菜单。

如果我将查询更改为 joinInner 而不是 joinLeft,问题会立即消失。我不明白左联接的用途,因为我认为该表中极不可能没有值,如果没有,我们可能不想显示此类别。

我至少看到过一些关于此问题的其他报告,但在运行索引或缓存时,它们很快就被一般的性能问题所忽略。

我不明白为什么当索引器运行时这个查询的行为非常不同,因为我可以在正常时间内对每个表单独进行完全选择。只有将左连接与索引器结合使用才会出现此问题。了解这通常是一个缓慢的查询。

问题:能否请您提供有关左连接的信息,为什么需要它,因为它非常慢。你也可以推荐一个解决方案来解决我的问题。

最佳答案

出现此问题是因为它只是此版本 Magento 中的一个问题查询。社区的更高版本已重写此方法/查询,使其没有任何左连接。

仍然存在 block 缓存失效和菜单重新生成的问题,但报告的主要问题已解决。

引用中的函数是文件Mage/Catalog/Model/Resource/Category/Flat.php的getParentCategories

关于mysql - Category/Flat.php 中的 Magento URL 索引器正在进行 joinLeft 慢速查询导致站点中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45452694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com