2013-03-27 79 views
0

我啓用了mySQL的慢查詢日誌來觀察需要執行超過10秒的慢速查詢。然後我發現mysql.slow_log表中只記錄了一個查詢。即:瞭解緩慢查詢

SELECT `e`.*, IF(at_is_active.value_id > 0, at_is_active.value, at_is_active_default.value) AS `is_active`, IF(at_include_in_menu.value_id > 0, at_include_in_menu.value, at_include_in_menu_default.value) AS `include_in_menu`, `core_url_rewrite`.`request_path` FROM `catalog_category_entity` AS `e` 
INNER JOIN `catalog_category_entity_int` AS `at_is_active_default` 
    ON (`at_is_active_default`.`entity_id` = `e`.`entity_id`) 
    AND (`at_is_active_default`.`attribute_id` = '42') 
    AND `at_is_active_default`.`store_id` = 0 
LEFT JOIN `catalog_category_entity_int` AS `at_is_active` 
    ON (`at_is_active`.`entity_id` = `e`.`entity_id`) 
    AND (`at_is_active`.`attribute_id` = '42') 
    AND (`at_is_active`.`store_id` = 1) 
INNER JOIN `catalog_category_entity_int` AS `at_include_in_menu_default` 
    ON (`at_include_in_menu_default`.`entity_id` = `e`.`entity_id`) 
    AND (`at_include_in_menu_default`.`attribute_id` = '67') 
    AND `at_include_in_menu_default`.`store_id` = 0 
LEFT JOIN `catalog_category_entity_int` AS `at_include_in_menu` 
    ON (`at_include_in_menu`.`entity_id` = `e`.`entity_id`) 
    AND (`at_include_in_menu`.`attribute_id` = '67') 
    AND (`at_include_in_menu`.`store_id` = 1) 
LEFT JOIN `core_url_rewrite` 
    ON (core_url_rewrite.category_id=e.entity_id) 
    AND (core_url_rewrite.is_system=1 
    AND core_url_rewrite.product_id IS NULL AND core_url_rewrite.store_id='1' 
    AND id_path LIKE 'category/%') 
WHERE (`e`.`entity_type_id` = '3') 
    AND (`e`.`entity_id` IN('####HERE ARE SOME IDs####')) 
    AND (IF(at_is_active.value_id > 0, at_is_active.value, at_is_active_default.value) = '1') 
    AND (IF(at_include_in_menu.value_id > 0, at_include_in_menu.value, at_include_in_menu_default.value) = '1') 

它也會導致高CPU使用率。我在同一時間觀察了日誌時間和CPU監視曲線,發現這一點。經常在9/10小時的差距之後發生。 當magento調用/執行此查詢時,您可以幫助我嗎,以便我可以更改任何負責執行此查詢的設置?

回答

0

這可以通過索引catalogue_url

甲快速修復是設置所有索引爲手動引起的。

然後通過cron每小時運行這個shell腳本:

php shell/indexer.php --reindex catalog_product_attribute 
php shell/indexer.php --reindex catalog_product_price 
php shell/indexer.php --reindex tag_summary 
php shell/indexer.php --reindex cataloginventory_stock 
php shell/indexer.php --reindex catalogsearch_fulltext 
php shell/indexer.php --reindex catalog_category_product 
php shell/indexer.php --reindex catalog_category_flat 
php shell/indexer.php --reindex catalog_product_flat 

它索引的所有網址,但。

然後運行此每晚:

<?php 

echo "clearing core_url_rewrite so that indexer can repopulate immediately\n"; 

require_once "/home/path/to/store/app/Mage.php"; 
umask(0); 
Mage::App('default'); 

$resource = Mage::getSingleton('core/resource'); 

$writeConnection = $resource->getConnection('core_write'); 

$query = "TRUNCATE `core_url_rewrite`"; 

$writeConnection->query($query); 

echo "cleared\n"; 

$start = time(); 

echo "reindexing catalog_url start \n"; 

$process = Mage::getSingleton('index/indexer')->getProcessByCode('catalog_url'); 
$process->reindexEverything(); 

$finish = time() - $start; 

echo "reindexing catalog_url finished in ".$finish." seconds \n"; 

?>