ACP2E-4603: カタログ権限の製品インデックスの再インデックスは、古い権限インデックス行とMySQLのデッドロックを残します

ACP2E-4603 パッチでは、カタログ権限の製品インデックス再作成で既存の権限インデックス行が変更されないため、更新されたカテゴリ権限の付与が製品に正しく反映されない問題が修正されました。 このパッチは、Quality Patches Tool (QPT) 1.1.79がインストールされている場合に利用できます。 パッチ IDはACP2E-4603です。 この問題は、Adobe Commerce 2.4.9で修正される予定です。

影響を受ける製品とバージョン

パッチはAdobe Commerceのバージョン​用に作成されました

  • Adobe Commerce(すべてのデプロイメント方法) 2.4.7-p3

Adobe Commerceのバージョンとの互換性:

  • Adobe Commerce(すべてのデプロイメント方法) 2.4.6 - 2.4.7-p9
NOTE
このパッチは、新しいQuality Patches Tool リリースを含む他のバージョンに適用される可能性があります。 パッチがAdobe Commerceのバージョンと互換性があるかどうかを確認するには、magento/quality-patches パッケージを最新バージョンに更新し、Quality Patches Tool:パッチの検索ページ ​で互換性を確認します。 パッチ IDを検索キーワードとして使用して、パッチを検索します。

イシュー

カタログ権限の製品インデックス再作成では、既存の権限インデックス行は変更されないため、更新されたカテゴリ権限の付与が製品に正しく反映されません。

複製する手順:

  1. カテゴリ権限を有効にする:

    1. Adminにログインします。
    2. Stores > Configuration​に移動します。
    3. Catalog​で、Catalog​を選択します。
    4. Category Permissions​を展開します。
    5. Enable​を​ はい ​に設定します。
    6. 設定を保存します。
  2. 50以上の顧客グループを作成します(オプション Aまたはオプション B)。

    1. オプション A – 管理者: Customers > Customer Groups​に移動し、Add New​を選択します。 グループ名(例:ACSD70034_01)を入力し、デフォルトの税区分を選択してから​ Save ​を選択します。 これを繰り返して50以上のグループを作成します。
    2. オプション B (推奨) — REST API: リクエスト本文{"group":{"code":"ACSD70034_01","taxClassId":0}}を使用して/rest/V1/customerGroupsにPOST リクエストを送信します。 この手順を繰り返して、50 グループ (ACSD70034_01ACSD70034_50)を作成します。
  3. 管理者にカテゴリの権限を追加:

    1. Catalog > Categories​に移動します。
    2. 再現性を高めるために、10~20種類以上のカテゴリを編集します。
    3. 各カテゴリで、Category Permissions​までスクロールし、Add Permission​を選択します。
    4. Web サイト(メイン Web サイトなど)を選択し、以前に作成した顧客グループのいずれかを割り当てます。
    5. 必要に応じて​Grant Catalog Category ViewGrant Product PriceGrant Checkout​を設定します。
    6. Save​を選択します。
    7. 推奨されるスケール:​大きなデータセット(例:20個のカテゴリと20~50個の顧客グループ)を作成して、400~1,000個の権限行を生成します。
  4. 1つのインデックステーブルを確保します(デフォルト)。

    1. Stores > Configuration > Catalog > Catalog > Category Permissions​に移動します。
    2. Dimensions​または​ Indexer Dimensions ​が表示される場合は、1つのインデックステーブルを使用するように、なし顧客グループ)に設定します。
  5. CLIからパラレルスレッドで再インデックスを実行します。

    1. MAGE_INDEXER_THREADS_COUNT=4をエクスポートします。
    2. php bin/magento indexer:reset catalogpermissions_category catalogpermissions_productを実行します。
    3. php bin/magento indexer:reindex catalogpermissions_category catalogpermissions_productを実行します。
    4. reset and reindex コマンドを5~10回繰り返して、並列実行時にデッドロックを再現します。

期待される結果:

再インデックスは並行スレッドで正常に完了し、更新されたカテゴリ権限の付与は、magento_catalogpermissions_index_product テーブルの製品に正しく反映されます。

実際の結果:

MySQL デッドロックエラー(1213)がインデックス再作成中に断続的に発生し、子プロセスがmagento_catalogpermissions_index_replicaまたはmagento_catalogpermissions_index_productREPLACE INTOを参照するエラーで失敗します。

インデックス再作成がエラーなしで完了しても、既存の権限インデックス行は更新されないので、製品は古いカテゴリ権限の付与を反映し続けます。

パッチを適用する

個別のパッチを適用するには、デプロイメント方法に応じて次のリンクを使用します。

関連トピックス

Quality Patches Toolについて詳しくは、次を参照してください。

recommendation-more-help
commerce-operations-help-tools