[groonga-dev,04154] PGroongaの大量件数該当時のscore関数のエラーについて

Back to archive index

tak_kaz24****@yahoo***** tak_kaz24****@yahoo*****
2016年 10月 18日 (火) 15:02:04 JST


10/13に「PGroongaの検索で大量件数該当時のエラーについて」の件名で問合せした高橋です。
以下のような事象が発生していますのでお手数ですが回答願えますでしょうか。

■環境
10/13問合せ時と同一環境
※Index Only Scanオプションは無効化済

■現象
テーブルに1万件程度データを格納し、検索に該当したデータをスコア順でソートするため、
以下のようなSQLでpgroonga.score関数を利用しスコア順のソートを実行すると、
200件以上検索該当するあたりから「このコマンドを実行するのに十分な記憶域がありません」のエラーが発生し、
返却されるスコアが0になったり、結果が返却されなかったりPostgreSQLから切断されたりといった事象が発生し、
最悪out of memoryエラーとなりPostgreSQLの再起動が必要となります。
検索該当100件以下程度ですと発生しないようです。

■実行したSQLの例
SELECT COLUMN1, pgroonga.score(CONTENT) AS SCORE_POINT FROM SCHEMA_NAME.CONTENT WHERE DOCUMENT_DATA @@ #SearchKeyword# ORDER BY SCORE_POINT DESC
※COLUMN1カラムがBIGSERIAL型。以下のpgroongaのインデックスを設定し、#SearchKeyword#に実際の検索語を設定

■テーブル定義
CREATE TABLE SCHEMA_NAME.CONTENT ( 
   COLUMN1    BIGSERIAL    PRIMARY KEY,
   COLUMN2    TEXT          NOT NULL,
   COLUMN3    TEXT        NOT NULL,
   COLUMN4    VARCHAR(10)    NOT NULL,
   COLUMN5    INTEGER        NOT NULL,
   COLUMN6    TIMESTAMP    NOT NULL,
   COLUMN7        VARCHAR(30)    NOT NULL,
   DOCUMENT_DATA    TEXT        NOT NULL
);

■インデックス定義
CREATE INDEX CO_SCORE_PGR_IDX    ON SCHEMA_NAME.CONTENT    USING pgroonga(COLUMN1, DOCUMENT_DATA);

■pgroonga.log(一部抜粋)
2016-10-18 13:28:17.641000|A| calloc fail (4194304)=0000000000000000 (C:\Users\kou\work\pgroonga\tmp\pgroonga-1.1.4\vendor\groonga\lib\io.c:1497) <22000>
2016-10-18 13:28:17.641000|C| mmap failed!!!! in GRN_IO_SEG_REF(00000001AB04B1C0, 1): このコマンドを実行するのに十分な記憶域がありません。
---上記2行と同内容が4行程度続く---
2016-10-18 13:28:17.641000|A| calloc fail (49536)=0000000000000000 (C:\Users\kou\work\pgroonga\tmp\pgroonga-1.1.4\vendor\groonga\lib\io.c:381) <22003>
2016-10-18 13:28:17.641000|e| grn_io_create_with_array failed
---上記2行と同内容が500行程度続く---
2016-10-18 13:28:17.641000|e| [table][cursor][next] invalid cursor
---以下のようなログも300行ほど発生---
2016-10-18 13:28:18.438000|A| calloc fail (148224)=0000000000000000 (C:\Users\kou\work\pgroonga\tmp\pgroonga-1.1.4\vendor\groonga\lib\io.c:234) <22141>
2016-10-18 13:28:18.438000|A| calloc fail (148224)=0000000000000000 (C:\Users\kou\work\pgroonga\tmp\pgroonga-1.1.4\vendor\groonga\lib\io.c:234) <22148>
2016-10-18 13:28:18.454000|e| [table][cursor][next] invalid cursor

■対応内容
前回問い合わせ時の仮想メモリ設定に加えてpostgresql.confのメモリ関連の設定を以下のように修正してみましたが改善されませんでした。

shared_buffers = 1GB
work_mem = 32MB
maintenance_work_mem = 128MB
effective_cache_size = 2GB

何か有効な対処方法等ありましたらご教示願えますでしょうか。
もしくはpgroonga.score関数の制限がありましたら教えてください(大量件数の制限やBIGSERIAL型は対象外等)。




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