次のような状況です。
週に約5回(キャッシュクリア、トラフィックスパイクなどの特定の状況とは関係ありません)、一部のクエリがデータの送信でスタックします(show processlist
):
> SELECT `main_table`.`entity_id`, `main_table`.`level`, `main_table`.`path`, `main_table`.`position`,
> `main_table`.`is_active`, `main_table`.`is_anchor`,
> `main_table`.`name`, `url_rewrite`.`request_path` FROM
> `catalog_category_flat_store_30` 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='30' AND url_rewrite.id_path LIKE 'category/%'
> WHERE (path LIKE '1/2/%') AND (main_table.store_id = '30') AND
> (is_active = '1') AND (include_in_menu = '1') ORDER BY name ASC
二つ目:
> SELECT `main_table`.`entity_id`, main_table.`name`, main_table.`path`,
> `main_table`.`is_active`, `main_table`.`is_anchor`,
> `main_table`.`manually`, `url_rewrite`.`request_path` FROM
> `catalog_category_flat_store_10` 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='10' 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/2/1528/1569/%') AND (`level` <= 4)
> ORDER BY `main_table`.`position` ASC
これらのクエリは、ナビゲーションメニューの生成に関連しています。問題なく動作し、常に非常に高速です。
1か月に数回、他のいくつかのクエリがデータのセディングまたはテーブルロックの待機でスタックします。
INSERT INTO `catalogsearch_result` SELECT 316598 AS `query_id`, `s`.`product_id`, MATCH (s.data_index) AGAINST ('STRING HERE' IN BOOLEAN MODE) AS `relevance` FROM `catalogsearch_fulltext` AS `s`
INNER JOIN `catalog_product_entity` AS `e` ON e.entity_id = s.product_id WHERE (s.store_id = 38) AND (MATCH (s.data_index) AGAINST ('STRING HERE' IN BOOLEAN MODE)) ON DUPLICATE KEY UPDATE `relevance` = VALUES(`relevance`)
(検索関連)
追加情報:
- core_url_rewrite-3Mレコード(30のウェブサイト、10万の製品)
- catalog_category_flat_store_ *-2000レコード(フラットカテゴリの使用が有効)
これは、いくつかの巨大なハードウェア上でvmwareを使用するセットアップで実行され(mysqlマスターには8コアが割り当てられ、64GbのRAM、SANストレージ上のSSDディスク)、mysqlは最適化され、継続的に監視されます。過去にI / Oに関連するいくつかの問題がありました(サーバーとSANストレージ間のリンクに関するいくつかの問題)。
ベアメタル(仮想化なし、同じ構成)で実行しているため、高負荷条件(包囲+負荷テストシナリオ、キャッシュなし)でこれが発生しないため、問題を特定できませんでした。
他に同様の問題がある人はいますか?
更新:
reindexAll検索は一時テーブルに移動されました(プロダクションで使用されるメインテーブルをロックせず、tmpテーブルの名前を変更しません)。したがって、インデックスの再作成プロセスは、Webサイトを検索する訪問者の妨げにはなりません。 https://github.com/magendooro/magento-fulltext-reindex kudos to carco