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

Back to archive index
川上 hakuh****@yahoo*****
2018年 10月 15日 (月) 21:13:19 JST


須藤さま

川上です。


ご連絡ありがとうございます!

メモリ対応のご対応ありがとうございます!
リリースされましたらぜひ利用させていただきます。
ちなみに、こちらはメモリが足りない場合にPostgresをシャットダウンさせないような
根本的な対策は難しそうなものなのでしょうか?

また、いただいた方法にて、記載した環境で再現しなくなることは確認できました。

ただ、実際の環境ではまだ再現し、実行されているSQLを深く追ってみました。
どうも、UNIONし、IS NULLでSELECTしたときにまだ発生するようです。

再現する環境を作成してみました。
まだ詳細が追えておらず恐縮ですが、何かおかしなところ等ありますでしょうか。。


○手順

※前回の users テーブルは DROP ください

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

-- view
bulk=# CREATE VIEW v_users AS (
     SELECT id, name, kind, created, updated FROM users
     UNION
     SELECT id, name, kind, created, updated FROM taikai_users
);


-- データ登録(1000万件) ※ taikai_users は0件
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(), null,
NOW(), NOW()
    FROM serical_table)
;

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


-- 大量にヒットする検索実施(このSQL実行中に後述のエラーが発生する)
-- ※ただし、v_users ではなく、 users へのSELECTは成功する
bulk=# SET enable_indexonlyscan = no;
bulk=# SELECT COUNT(*) FROM v_users WHERE kind is null AND name &@~ 'ka';
サーバとの接続が想定外にクローズされました
          おそらく要求の処理前または処理中にサーバが異常終了
          したことを意味しています。
サーバーへの接続が失われました。リセットしています: 失敗。


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



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