0

mySQL のスロー クエリ ログを有効にして、実行に 10 秒以上かかるスロー クエリを観察しました。その後、mysql.slow_log テーブルに記録されているクエリが 1 つだけ見つかりました。あれは:

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 によってこのクエリが呼び出された/実行されたときに、私を助けてもらえますか?

4

1 に答える 1

0

これは、インデックス catalogue_url が原因である可能性があります

簡単な修正は、すべてのインデックス作成を手動に設定することです。

次に、1 時間ごとに cron を介してこのシェル スクリプトを実行します。

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 

URL を除くすべてのインデックスを作成します。

次に、これを毎晩実行します。

<?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";

?>
于 2013-07-09T04:45:58.637 に答える