ACSD-62577: Prestandaoptimering för Storefront-sökning

Korrigeringen ACSD-62577 åtgärdar problemet med långsam prestanda för sökfrågor i butiker genom att optimera både fråga- och tabellindex. Den här korrigeringen är tillgänglig med Quality Patches Tool (QPT) 1.1.56. Korrigerings-ID är ACSD-62577. Observera att problemet var planerat att åtgärdas i Adobe Commerce 2.4.8.

Berörda produkter och versioner

Korrigeringen har skapats för Adobe Commerce-version:

Adobe Commerce (alla distributionsmetoder) 2.4.6, 2.4.7-p2

Kompatibel med Adobe Commerce-versioner:

Adobe Commerce (alla distributionsmetoder) 2.4.4 - 2.4.7-p3

NOTE
Korrigeringen kan bli tillämplig för andra versioner med nya Quality Patches Tool-versioner. Om du vill kontrollera om korrigeringen är kompatibel med din Adobe Commerce-version uppdaterar du magento/quality-patches-paketet till den senaste versionen och kontrollerar kompatibiliteten på Quality Patches Tool: Sök efter korrigeringsfiler. Använd patch-ID:t som söknyckelord för att hitta patchen.

Problem

Stora search_query-tabeller gör att sökningar i butiker går långsammare, vilket ökar svarstiderna i frontend på grund av ineffektiva frågor och brist på optimerade tabellindex.

Steg som ska återskapas:

  1. Konfigurera Adobe Commerce Developer med prestandaverktygen small.xml.

  2. Gå till SQL-kommandoraden och ta bort tabellen search_query med följande kommandon:

    code language-none
    SET FOREIGN_KEY_CHECKS = 0;
    DROP TABLE search_query;
    SET FOREIGN_KEY_CHECKS = 1;
    
  3. Fyll i tabellen search_query med ett stort antal poster, t.ex. 4 miljoner poster.

  4. Utlös omindexering och tömning av cacher.

    code language-none
    bin/magento indexer:reindex
    bin/magento c:c
    bin/magento c:f
    
  5. Aktivera felsökningsloggar för databaser:

    code language-none
    bin/magento dev:query-log:enable
    
  6. Sök efter en term i sökfältet för butiker, t.ex.
    http://your_magento_instance/default/catalogsearch/result/?q=test.

  7. Kontrollera db.log för frågekörningstiden för följande SQL:

    code language-none
    SELECT COUNT(*) FROM (
    SELECT DISTINCT `main_table`.`query_text`
    FROM `search_query` AS `main_table`
    WHERE (main_table.store_id IN (1))
    AND (main_table.num_results > 0)
    ORDER BY `main_table`.`popularity` DESC
    LIMIT 100  ) AS `result` WHERE (result.query_text = 'test')
    

Förväntade resultat:

Frågekörningstiden är optimerad, vilket resulterar i en mindre signifikant ökning av svarstiden när stora search_query tabeller bearbetas.

Faktiska resultat:

Frågekörningstiden ökar avsevärt på grund av ineffektiv hantering av den stora search_query-tabellen:

TIME: 10.8520 seconds

Tillämpa korrigeringen

Använd följande länkar beroende på distributionsmetod för att tillämpa enskilda korrigeringsfiler:

Relaterad läsning

Mer information om Quality Patches Tool finns i:

recommendation-more-help
c2d96e17-5179-455c-ad3a-e1697bb4e8c3