1250個の文字列を90kパターンに一致させるのはなぜそんなに遅いのですか?

1250個の文字列を90kパターンに一致させるのはなぜそんなに遅いのですか?

私の文字列はファイルパスです。たとえば、s/14/11/13/15/n7ce49B_235_25ed2d70.jpg私のパターンはすべてn7ce49B_.+

GNU grep 2.6.3下から走っています。Debian 6.0.10存在するデルDL360G7サーバー(このシステムのパフォーマンスに関するアイデアを提供するために言及されています)には15k HDDがあり、次のコマンドはtime LC_ALL=C grep -E -f path_to_patterns_file path_to_strings_file完了できません。サーバースワップがひどいです。 20,000パターンを作成するのに3時間以上かかります。

これは私にとって合理的ではないようです。

コメントのリクエストに応じて、次の文書が提供されます。ファイルパス 20kパターン

また、入力ラインとパターンの数をテストして調整することもできます。

xxd -p /dev/urandom | fold -sw 100 | head -n 1250 |
  grep -Ef <(xxd -p /dev/urandom | fold -sw 10 | head -n 20000)

答え1

以前のバージョンのGNU grepでパフォーマンスの問題が発生しました(バグ #22357)解決しましたこれにより提出、2.28 にリリースされたが変更いくつかの回帰を導入しました。grepしたがって、GNU 3.0以降を使用する必要があります。

関連情報