[groonga-dev,04687] Re: PGroongaの全文検索時にメモリ不足でPostgresが落ちる

Back to archive index
川上 hakuh****@yahoo*****
2018年 10月 10日 (水) 14:38:29 JST


須藤さま

川上です。

ご連絡遅くなって申し訳ございません。


再現用のSQL一式を作成してみました。


○前提

Postgres, PGroongaインストール済み

OSメモリ1GB、他、基本的には初期設定のまま


○手順

-- データベース作成

$ psql -U postgres

postgres=# CREATE DATABASE bulk;

postgres=# \q

$ psql -U postgres -d bulk

bulk=# CREATE EXTENSION pgroonga;


-- テーブル作成
bulk=# CREATE TABLE users (
     id SERIAL,
     name TEXT NOT NULL,
     kind INTEGER NOT NULL,
     created TIMESTAMP,
     updated TIMESTAMP
);


-- データ登録(1000万件)
bulk=# WITH RECURSIVE serical_table(n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM serical_table
  WHERE n < 10000000
)
INSERT INTO users (name, kind, created, updated)
   (SELECT 'kawakami' || random(), ((random() * 1000)::int % 100), 
NOW(), NOW()
   FROM serical_table)
;

-- PGroongaのINDEX作成
bulk=# CREATE INDEX pgroonga_name_index ON users USING pgroonga (name);


-- 大量にヒットする検索実施(このSQL実行中に後述のエラーが発生する)
bulk=# SELECT COUNT(*) FROM users WHERE name &@~ 'ka';

サーバとの接続が想定外にクローズされました
         おそらく要求の処理前または処理中にサーバが異常終了
         したことを意味しています。
サーバーへの接続が失われました。リセットしています: 失敗。



○補足

未検証ですが、検証環境のメモリが大きくて再現しない場合は、

下記の設定を入れると再現するのかもしれません。

$ vi /etc/sysctl.conf

vm.max_map_count = 3906

$ sysctl -p



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


On 2018/10/05 17:34, Kouhei Sutou wrote:
> 須藤です。
>
> うーん、では、未知の問題かもしれません。
>
> 手元で再現させたいのですが、再現用のSQL一式(CREATE TABLEや
> CREATE INDEXやINSERTやSELECT)を提供してもらえないでしょうか?
>
> In <1a428****@yahoo*****>
>    "Re: [groonga-dev,04685] Re: PGroongaの全文検索時にメモリ不足でPostgresが落ちる" on Fri, 5 Oct 2018 17:29:54 +0900,
>    川上 <hakuh****@yahoo*****> wrote:
>
>> 須藤さま
>>
>> 川上です。
>>
>> ご連絡ありがとうございます!
>> 2.1.3にダウングレードしてみましたが、結果は変わらずでした。。
>>
>> ちなみに、PGroongaのログ(/var/lib/pgsql/10/data/pgroonga.log)
>> も見てみましたが、何も出力されていないようでした。
>>
>> これを回避する設定があるとすれば、Postgres側でしょうか。。
>>
>> On 2018/10/05 8:55, Kouhei Sutou wrote:
>>> 須藤です。
>>>
>>> PGroonga 2.1.3を試してみてもらえますか?
>>> 2.1.4で入れた変更が影響している可能性があるのです。
>>>
>>> 以下で2.1.3にダウングレードできるはずです。
>>>
>>> % sudo -H yum install postgresql10-pgroonga-2.1.3
>>>
>>> In <44217****@yahoo*****>
>>>     "[groonga-dev,04684] PGroongaの全文検索時にメモリ不足でPostgresが落ち
>>>     る" on Thu, 4 Oct 2018 19:24:08 +0900,
>>>     ??? <hakuh****@yahoo*****> wrote:
>>>
>>>> はじめて連絡させていただきます、川上と申します。
>>>>
>>>>
>>>> 現在、PGroongaを初めて使って全文検索を実装しているのですが、
>>>>
>>>> ヒット件数が多い場合にメモリ不足になり、Postgresが落ちる状態になって困っ
>>>> ております。
>>>>
>>>>
>>>> ◯環境
>>>>
>>>> ・DBサーバーとWebサーバーは別サーバー(CentOS7)
>>>>
>>>> ・Postgres10.5
>>>>
>>>> ・PGronnga2.1.4
>>>>
>>>> ・OSメモリ:1GB(検証中なので低スペック)
>>>>
>>>> ・検索対象のテーブル件数:730万件程度
>>>>
>>>> ・検索対象のテーブル容量:4.4GB程度
>>>>
>>>> ・INDEX容量:1GB程度
>>>>
>>>> ・下記設定は入れております
>>>>
>>>>   vm.overcommit_memory = 1
>>>>
>>>>
>>>> ◯現象
>>>>
>>>> 400万件ほどヒットする検索を行うと、Postgresが異常終了する
>>>>
>>>>  SQL例)select count(*) from table where column &@~ '100';
>>>>
>>>>
>>>> ◯Postgresのログ抜粋
>>>>
>>>>   DEBUG:  mmap(291504128) with MAP_HUGETLB failed, huge pages
>>>> disabled:
>>>> メモリを確保できません
>>>>   LOG:  データベースシステムは中断されました: 2018-09-14 19:37:21
>>>> JST
>>>> まで動作していたことは確認できます
>>>>   FATAL:  データベースシステムはリカバリモードです
>>>>   LOG:  データベースシステムは正しくシャットダウンされていません;
>>>> 自動リカバリを実行中
>>>>
>>>>
>>>> ◯質問事項
>>>>
>>>> この状態でメモリ不足になることは理解できます。
>>>>
>>>> 困っているは、メモリ不足に陥った場合にPostgresが落ちるという現象です。
>>>>
>>>> 例えば、検索中に設定した上限のメモリ数を使っても検索出来ない場合は、検
>>>> 索処理を中止して、
>>>>
>>>> エラーを返すようにする(Postgresが異常終了しない)といった設定や方法は
>>>> ないのでしょうか?
>>>>
>>>>
>>>> ◯補足1
>>>>
>>>> Groonga用のサーバーを立てればPostgresが落ちることはないのかもしれませ
>>>> んが、
>>>>
>>>> 都合上、難しい状態にあります。
>>>>
>>>>
>>>> ◯補足2
>>>>
>>>> 検索結果が数万件程度であれば、数ミリ秒で検索結果が返ることは確認してお
>>>> ります。
>>>>
>>>> ただし、そのような検索条件であっても、JMeterを用いて同時に検索処理を走
>>>> らせたら
>>>>
>>>> やはりメモリ不足に陥るため、メモリ不足になってもPostgresが落ちないよう
>>>>>>>>
>>>> 根本的な対策を入れておきたいと考えております。
>>>>
>>>>
>>>>
>>>> 以上、何卒よろしくお願いいたします。
>>>>
>>>> _______________________________________________
>>>> groonga-dev mailing list
>>>> groon****@lists*****
>>>> https://lists.osdn.me/mailman/listinfo/groonga-dev
>>> _______________________________________________
>>> groonga-dev mailing list
>>> groon****@lists*****
>>> https://lists.osdn.me/mailman/listinfo/groonga-dev
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> https://lists.osdn.me/mailman/listinfo/groonga-dev



More information about the groonga-dev mailing list
Back to archive index