web-dev-qa-db-ja.com

なぜ検索cronがとても遅いのですか?

私のサイトの検索cronは、どれほど頻繁に実行しても、約2〜3分かかります。前回の実行以降に追加された新しいノードのみがインデックスに追加されるという印象を受けました。どうやらそれは異なって働いていますか?

SOLR検索インデックスの更新はより速くなりますか?

2
uwe

Cron実行ごとにインデックスを作成するノードの数を確認します。数が多い場合は、処理に時間がかかります。

一方、インデックスを作成するノードがない場合、検索cronはそれほど長くはかかりません。インデックス化されていないノードの数は、検索設定(admin/config/search/settings)でいつでも確認できます。番号が0で、検索cronにそれでも時間がかかる場合は、いくつかの問題があるか、何か他の問題が原因である可能性があります。

Elysia cron を見て、いつ、どのくらいの頻度で、何が実行されるかを微調整します。

そして、あなたの最後の質問について-私が覚えている限り、SOLRはそれをバックグラウンドで実行しているので-はい、検索インデックスの更新はより速くなります。

[編集]

これについて考えてみましょう。フィールドの数(すべてのノードでnode_loadを呼び出すため)と本体フィールドの長さに関係している可能性があります。

1
Aram Boyajyan

私が遭遇した1つの癖は、node_loadnode_viewの間に発生するすべてがインデックス作成中に発生することです。プロセスを確認するには、 _node_index_node 逆方向にトレースを開始してください。

つまり、ページが表示されたときに発生する負荷の高い操作は、ページにインデックスが作成されたときにも発生します。

たとえば、しばらく前にnode_loadの間に外部Webサービスをクエリしたサイトがあり、検索のインデックス作成がslowであることに気付きました。私のインスタンスでは、外部のWebサービス呼び出しは追加されていて、インデックス作成中には必要ありませんでした。私は何かをすることでそれを解決しました

function foo_node_load ($nodes, $types)
{
  if (arg(0) != "node") return;

  // rest of hook
}

だから、私はあなたのフックで何が起こっているのか、そしてプロセスを遅くしている可能性のあるプリプロセス/プロセス関数を見てみましょう。

3
mpdonadio