2017-08-02 54 views
0

軟件:啓用Magento的社區 平分類指數的問題Magento的URL索引joinLeft慢查詢的類別/ Flat.php導致網站中斷

說明: 當我運行一個完整的URL的索引,它需要一個非常很長一段時間才能完成,這在某些情況下我明白可以是正常的。這不是我要問的問題。索引器運行時,塊緩存不斷失效。發生這種情況時,Magento會嘗試在加入URL重寫表時從平面類別表中重建菜單。這是核心的文件中的一部分 法師/目錄/型號/資源/分類/ 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,此查詢速度非常慢。此加入在上述文件中定義。當索引器運行時,該查詢超時。所有嘗試運行相同查詢以重建導航菜單的服務器上的連接都會建立起來。

如果我將查詢更改爲joinInner而不是joinLeft,問題立即消失。我不明白左連接的目的,因爲我認爲它不太可能在這張表中沒有價值,如果沒有,我們可能不想顯示這個類別。

我已經看到這個問題的至少一些其他報告,但它們在運行索引或緩存時很快就會遇到一般性能問題。

我不明白爲什麼這個查詢在索引器運行時行爲非常不同,因爲我可以在正常的時間內對每個表單獨進行完整選擇。只有將左連接與索引器結合,纔會發生此問題。理解這通常是一個緩慢的查詢。

問題:您能否提供關於左連接的信息,爲什麼需要它,因爲它非常緩慢。你也可以推薦一個解決方案來解決我的問題。

+0

有很多事情怎麼回事。索引器會立即使緩存失效,所以當導航塊不在緩存中時,所有前端請求都會嘗試重建它(由Magento 1.X中的默認導航塊運行的查詢很昂貴) 。在Magento 2和第三方擴展中,通過將導航HTML生成並緩存/存儲在別處,僅在重新生成時才更新,從而避免了這個問題。而在索引器的情況下,只有在數據更新後纔會失效,而不是在運行之前。 – CCoffee

回答

0

發生此問題是因爲它只是這個版本的Magento中的問題查詢。社區的更新版本已將此方法/查詢重寫爲不具有任何左連接。

塊緩存失效並且菜單重新生成仍存在問題,但報告的主要問題已解決。

功能在引用文件法師/目錄/型號/資源/分類的getParentCategories/Flat.php