Magentoでは1万点以上の商品を普通に取り扱うことができます。
相応のサーバ性能が求められますが、アプリケーションを大規模にチューニングしたり、改造する必要はありません。
ですが、1,000件以上のデータに対して一括操作をする場合には注意が必要です。

1,000件以上のデータを一括で扱うようなシーンとは

Magentoの管理画面では以下のようなデータに対し、1,000件以上の一括操作をすることがありえます。

  • 商品
  • 顧客
  • ニュースレター購読者
  • 注文関係

これらのデータを一覧表示する機能(Gridと呼びます)では、今表示しているデータだけでなく、検索結果のデータ全てに対して一括で処理をすることができます。

そのため、1,000件という壁は比較的頻繁に超えてしまうケースが起きえます。
そして、1,000件を超えてデータを一括処理しようとすると、Magentoを動かしているPHPがエラーを起こしてしまうことがあるのです。 

問題の原因

問題の原因は、PHPの仕様がPHP5.3.9から変わったことにあります。もうずいぶん前の仕様変更なのですが、PHPの設定ファイルである、php.iniを変更しないままアップデートをしていると、この問題に直面することになります。

PHP5.3.9では、「max_input_vars」という設定値が新たに追加されていて、この値が標準では1,000であることが、この問題の原因となっています。
max_input_vars」 は「hashdos」と呼ばれる攻撃手法の対策に設けられたのですが、セキュリティ面の強化が行われたために、意識していないと運用時に1,000件以上のデータを一括処理できないという問題に直面するわけです。

対策方法

この問題の対策方法は3通りあります。

PHPの設定を変更し、1,000以上の値をmax_input_varsにセットする

max_input_varsの値を増やすことでこの問題を一時的に回避します。
ただし、本来セキュリティ目的で設けられたパラメータを増やすことは、セキュリティ性を下げることになるので、あまりおすすめはできません。あくまでも一時しのぎです。

1,000件以上の一括処理を管理画面から行わない

一括処理はCSVによるデータ投入やバッチ処理に委ね、管理画面からは操作しないようにします。
システムの改修や機能追加が必要になりますが、セキュリティ性は維持したままで運用ができます。 

管理画面用のサーバをわけて、アクセス制限を施した上でmax_input_varsの値を増やす

管理画面専用のサーバを設けることで、PHPの設定をそのサーバだけわけます。
こうすることで、公開画面用サーバとは異なる設定で、関係者だけが使う環境を維持できます。
ただ、維持費が増えるので予算に余力がある方向けです。

いずれの方法もこの問題を根治させることはできません。
セキュリティの観点からみると、多すぎる入力値は害悪です。
運用の観点からは一括して多くのデータを処理したほうが作業効率はよいので、無用の制限は害悪です。

上手くバランスを取りながら、妥協点を見つけていくことが、この問題を解決するためには必要でしょう。