[groonga-dev,01903] Droongaの504エラー時の挙動について

Back to archive index

Naoya Murakami visio****@gmail*****
2013年 11月 13日 (水) 12:20:22 JST


お世話になっております。村上です。

すいません。宛先を間違ってしまいましたので、MLに再送いたします。

また、追加の情報として以下を提供します。

・現在起動中のfluent-plugin-droongaの出力(随時更新されます)
http://test.createfield.com/back.log

・現在起動中のexpress-droongaの出力(随時更新されます)
http://test.createfield.com/front.log
※09:46:40は、空クエリのエラー

・express-droongaで504エラーとなるクエリのGroongaコマンドによる出力結果
% groonga /var/lib/mysql/jppat_ft.mrn "select ftext --match_columns
title||abstract||claims||freeword||description_19xx||description_200x||description_201x
--query '画像のハーフトーン閾値生成装置及び方法' --output_columns app_id,title --offset 0
--limit 20" | jq .
[
  [
    0,
    1384311647.11816,
    134.869267463684
  ],
  [
    [
      [
        1
      ],
      [
        [
          "app_id",
          "ShortText"
        ],
        [
          "title",
          "LongText"
        ]
      ],
      [
        "JP19820151640",
        "画像のハーフトーン閾値生成装置及び方法"
      ]
    ]
  ]
]
※別のもう少しハードスペックの良いサーバの場合20sぐらいでした。

-----------------------------

お世話になっております。村上です。

Mroongaのストレージモードで作成したGroongaのデータベースを使って、
Droongaで検索システムを作ろうとしています。

fluent-plugin-droongaでGroongaのデータベースを起動し、
express-droonga経由で検索すると、しばしば504エラーになります。

504エラーは、ややながい文字列のクエリや非常に検索結果が多い場合に
発生することがおおいです。
なお、この場合、fluentdは沈黙しています。too many open file等のGroonga
のエラーの場合は、fluentdがエラーを吐きます。

検索に時間がかかってタイムアウトになっているのかと、以下を参考にexpress-droonga
に渡すメッセージにタイムアウト値を渡すもかわりませんでした。
https://github.com/droonga/express-droonga/wiki/Message-format%3A-search-feature

ここで、さらに問題なのが、504エラーになるクエリを投げつけた後、
504エラーにならなかった軽いクエリもしばらく(結構ながい間)エラー
になってしまいます。

Q1. 504エラーを回避するチューニング方法等はありますでしょうか?

Q2. 504エラーが発生した後に、すぐに検索結果を得られるようにできないでしょうか?

特定のクエリではなく、ある程度、大きくて負荷が高い場合に発生する
らしく、簡単に再現できる方法は特定できていません。
以下のURLにqueryとtimeoutだけ設定できる簡単なフォームをつくりました。

http://test.createfield.com:3000/
(データベースサイズ460GiB メモリ16GBのHDD2本 解約済みで期限切れ待ちのサーバ)

1.たとえば、検索クエリに「データベース」と入力し、タイムアウトに「3000」
を入力して検索をクリックすると、321256件が0.4秒ぐらいで返ってきます。

2.つぎに検索結果で得られた長めのタイトル「画像のハーフトーン閾値生成装置
及び方法」を検索クエリに適当に入力して、検索すると504エラーコードが返ってきます。

3.再度検索クエリを「データベース」にしても、504エラーコードが返ってきます。
その後、しばらくの間は、なにをやっても504エラーコードになります。

4.その後何分かまつと、再度検索クエリ「データベース」で検索結果が返ってくる
ようになります。

事象の原因が特定できておらず、難しいと思うのですが、何か解決方法が
あれば、よろしくお願いします。


以上、よろしくお願いします。



groonga-dev メーリングリストの案内
Back to archive index