[groonga-dev,03729] Re: groonga検索時にrc=-35のエラーが発生する

Back to archive index

Susumu Yata yata****@razil*****
2015年 12月 8日 (火) 23:39:21 JST


矢田です.

本件でサイズ不足が発生する領域を動的に拡張するよう修正してみました.

- grn_expr: dynamically resize expr->codes · groonga/groonga @ 7bb4f6e
 - https://github.com/groonga/groonga/commit/7bb4f6eb7aed9bb68c003b3c283505bc3444d16c

手元で試した限りでは, OR を 1,000 個含むクエリでも問題なく実行できました.
修正前は OR を 256 個含むクエリで "stack is full " になっていました.

対応する GitHub Issue は以下です.

- A query with a lot of ORs fails · Issue #443 · groonga/groonga
 - https://github.com/groonga/groonga/issues/443

よろしくお願いします.

2015年12月7日 22:47 Hiroyuki Sato <hiroy****@gmail*****>:
> 佐藤です。
>
> 要望というか希望です。
> もしSTACK_SIZEの変更が必要であれば自分でコンパイルするのは面倒なので、
> 設定で変更できると良いと思います。
> (とはいえORが512ぐらい指定できれば十分なんですが、そんな使い方他の人しませんよね。)
>
> やっていることはhighlight_htmlを適用する文字の指定です。
>
> 他の方法で良いのがあればそちらにしようと思います。
> 下記は簡略化していますが、"きもの"はハイライトしたいが、"はきもの"は除外したい
> ということをするために
>
> ( きもの - はきもの) OR ( 別キーワード) ..というようなことをしております。
> キーワードがよく変わるのでGroonga内で永続化せずに実現できるといいなと思っています。
> なにか良いアドバイスをいただけると助かります。
>
> よろしくお願いします。
>
>   select \
>     --table Data \
>     --match_columns article \
>     --output_columns "_key,highlight_html(article),line_no" \
>     --query "( あいこ OR あかり OR ありま OR いつお OR うらら OR かおり OR かとう OR かなえ OR かなめ
> OR きよこ OR きよみ OR こずえ OR しげこ OR すずき  OR せいこ OR せんだ OR たいじ OR たけお OR たまえ OR
> ちゃん OR ちょこ OR とよこ OR ながの OR のぼる OR のむら OR まこと OR みどり OR みやこ OR みゆき OR よしの OR
> よしみ OR 健次郎 OR 利根川 OR 千々石 OR 千鶴子 OR 大久保 OR 大河原 OR 威海衛 OR 宇都宮 OR 小石川 OR 江田島 OR
> 海江田 OR 西久保 OR 高千穂 OR こうへい OR こうめい ) OR (line_no:>1 + line_no:<500)" \
>     --command_version 2 \
>     --limit -1
>
>
>
>
>
> 2015年12月7日(月) 18:19 Hiroyuki Sato <hiroy****@gmail*****>:
>>
>> 矢田様
>>
>> 佐藤です。
>> お世話になっております。
>>
>> 2015年12月7日(月) 18:00 Susumu Yata <yata****@razil*****>:
>>>
>>> 矢田です.
>>>
>>> ご報告ありがとうございます.
>>>
>>> エラーメッセージを参考にソースコードを辿ってみたところ, OR の個数が原因のようです.
>>>
>>> [[-35,1449474361.23027,0.00206923484802246,"stack is
>>> full",[["grn_expr_append_obj","expr.c",751]]],[]]
>>>
>>> 検索条件を構成する要素が多すぎるために,固定サイズの領域が埋まってしまったようです.
>>
>>
>> やはり個数ですか、、、
>> ORの個数こんなに増えて大丈夫かな???とは思っていました。
>>
>>
>>>
>>> // expr.c
>>> if (e->codes_curr >= e->codes_size) {
>>>   ERR(GRN_NO_MEMORY_AVAILABLE, "stack is full");
>>>   goto exit;
>>> }
>>>
>>> // expr.c
>>> int size = GRN_STACK_SIZE;
>>> ...
>>> expr->codes_size = size;
>>>
>>> // config.h
>>> /* stack size */
>>> #define GRN_STACK_SIZE 1024
>>>
>>> 一応,この値はビルド時に指定できるみたいです.
>>> コミットメッセージには "This is DANGER parameter!!!" と書かれていますが….
>>
>>
>> しかしさすがに1024は使っていないように思うのですが、
>> ユーザが利用可能な数は、いくつになるかおわかりでしょうか?
>>
>> さすがにDANGERとかいてあるパラメータを変更するのは
>> 気が引けますね。
>>
>> 倍あれば当面こまらなそうなんですが、、
>> なにか別の検索方法を探る必要がありますね。
>>
>> ありがとうございました。
>>
>>
>>>
>>>
>>> - Make GRN_STACK_SIZE customizable on build · groonga/groonga @ 1162623
>>>  -
>>> https://github.com/groonga/groonga/commit/116262374751a91318c4815e9a293aeeaf98cfbb
>>>
>>> 2015年12月7日 16:52 Hiroyuki Sato <hiroy****@gmail*****>:
>>> > 手動でコマンドを実行したら
>>> >
>>> > [[-35,1449474361.23027,0.00206923484802246,"stack is
>>> > full",[["grn_expr_append_obj","expr.c",751]]],[]]
>>> >
>>> > となりました。
>>> > ORの個数?、クエリの長さ?を減らすと大丈夫なようです。
>>> >
>>> > よろしくお願いします。
>>> >
>>> >
>>> >
>>> > 2015年12月7日(月) 16:19 Hiroyuki Sato <hiroy****@gmail*****>:
>>> >>
>>> >> 佐藤です。
>>> >>
>>> >> 質問です。
>>> >>
>>> >> 1, rc=-35のエラー
>>> >>
>>> >>  groongaで検索をしていて次のエラーが発生しました。
>>> >>
>>> >>    2015-12-07 15:26:13.929059|0x7fee80d71d10|:000000000834456
>>> >> select(0)
>>> >>    2015-12-07 15:26:13.929103|0x7fee80d71d10|<000000000878385 rc=-35
>>> >>
>>> >>  rc=-35とは、メモリ不足だと思うのですが、
>>> >>  なにか設定でこの容量を増やすことはできますでしょうか?
>>> >>
>>> >>  include/groonga/groonga.h
>>> >>    GRN_NO_MEMORY_AVAILABLE = -35,
>>> >>
>>> >> 2, やっていることは
>>> >>
>>> >>   https://github.com/hiroyuki-sato/groonga-highlight_test#クエリ
>>> >>   とほぼ同じです。ただし、ORの数が252個ぐらいあります。
>>> >>
>>> >>   select \
>>> >>     --table Data \
>>> >>     --match_columns article \
>>> >>     --output_columns "_key,highlight_html(article),line_no" \
>>> >>     --query "( あいこ OR あかり OR ありま OR いつお OR うらら OR かおり OR かとう OR かなえ OR
>>> >> かなめ
>>> >> OR きよこ OR きよみ OR こずえ OR しげこ OR すずき  OR せいこ OR せんだ OR たいじ OR たけお OR たまえ
>>> >> OR
>>> >> ちゃん OR ちょこ OR とよこ OR ながの OR のぼる OR のむら OR まこと OR みどり OR みやこ OR みゆき OR
>>> >> よしの OR
>>> >> よしみ OR 健次郎 OR 利根川 OR 千々石 OR 千鶴子 OR 大久保 OR 大河原 OR 威海衛 OR 宇都宮 OR 小石川 OR
>>> >> 江田島 OR
>>> >> 海江田 OR 西久保 OR 高千穂 OR こうへい OR こうめい ) OR (line_no:>1 + line_no:<500)" \
>>> >>     --command_version 2 \
>>> >>     --limit -1
>>> >>
>>> >> 3, 環境
>>> >>   OS: Scientific Linux 6 64bit
>>> >>  groonga: 5.0.8です。(正確にはhighlight_html修正済みの5.0.7-2)
>>> >>
>>> >>   vm.overcommit_memroyは1にしてあります。
>>> >>   DBの格納されているサイズは280MBぐらいでそれほど容量が大きいわけではありません。
>>> >>
>>> >>   ファイルは32個ぐらいしか開いておらずファイルディスクリプタが足りないということ
>>> >>   もないようです。
>>> >>
>>> >> よろしくお願いします。
>>> >>
>>> >>
>>> >>
>>> >>
>>> >
>>> >
>>> > _______________________________________________
>>> > groonga-dev mailing list
>>> > groon****@lists*****
>>> > http://lists.osdn.me/mailman/listinfo/groonga-dev
>>> >
>>>
>>>
>>>
>>> --
>>> Susumu Yata <yata****@razil*****>
>>> _______________________________________________
>>> groonga-dev mailing list
>>> groon****@lists*****
>>> http://lists.osdn.me/mailman/listinfo/groonga-dev
>
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev
>



-- 
Susumu Yata <yata****@razil*****>



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