[groonga-dev,04068] Re: io_flushが大量のメモリを確保する

Back to archive index

高見 直輝 takam****@orega*****
2016年 7月 6日 (水) 15:59:51 JST


高見です。

io_flushコマンドの使い方について自己レスです。

> > > 【環境】
> > > PostgreSQL:9.4.5
> > > PGROONGA:1.0.2
> > > 
> > > 現在、サーバの電源断によるPGROONGAのインデックスファイル破損を回避するた
> > > めに、GROONGAのio_flushコマンドを実行しています。
> > > ※[groonga-dev,03528] からの流れ
> > > 
> > > このコマンドを使用したときに、postgresのプロセスが大量のメモリを確保する
> > > のですが、これは正常な挙動なのでしょうか?
> > 
> > はい、正常な挙動です。
> > 今のio_flushの実装はすべてのテーブル・カラムをフラッシュしま
> > す。このとき、まだ開いていないテーブル・カラムならそのテーブ
> > ル・カラムのファイルを開いてフラッシュします。このファイルを
> > 開いたときにリソースを確保するのでメモリー使用量が増えます。
> 
> 『開いた』というのは、PostgreSQLでSelect文を発行した場合も含まれるのでしょうか?
> io_flushのドキュメントを読むと、このコマンドは“Groongaデータベースへの変更量に応
> じて処理が重くなる”とあるのですが、Select文もGroongaデータベースを変更するのでしょ
> うか?
> また、この処理は“OSが自動的に書き出す”場合にも同様の挙動となるのでしょうか?
> 現在、このコマンドを実行するとメモリの大量使用によりOSがハングアップする状況が発生
> しているのですが、コマンドを実行しなくても同様の状況が発生し得るのでしょうか?
> 
> > ただ、まだ開いていないテーブル・カラムはフラッシュする必要は
> > ないので、本当は開く必要はありません。近い将来、このケースの
> > ときは開かないようにする予定です。
> 
> 現時点でクラッシュ時の破損を回避しつつ、メモリ消費量を減らす事は可能でしょうか?
> io_flushコマンドで--target_nameを指定してインデックスを1つずつ処理することでメモリ
> 使用量を抑えられるのは確認したのですが、これでクラッシュ時の問題を解決できるのかが
> 不明です。

すいません。recursiveについて理解が足りていませんでした。
io_flush --target_name TABLE_NAME
を実行した後に、
io_flush --recursive no
を実行すれば良いのですね。

> > > なお、メモリの確保量はテーブル(インデックス?)の数又はサイズに比例して
> > > 大きくなっているようです。
> > > 例)
> > >  データサイズ250MBのテーブルが1つ:135MB
> > >  700MB×1つ、300MB×2つ、:960MB
> > 
> > はい、傾向はそうなります。
> > (Groongaの)テーブル・カラムの数とそれらのサイズが増えると
> > その分関連するリソースが増えるのでメモリー使用量は増えます。
> > テーブル・カラムの数が増える方が、サイズが増えるよりも、影響
> > は大きいです。
> 
> つまり、テーブル毎に実行するにしても、作成もしくはtruncate直後のみにした方が良いと
> いうことですね。
> 
> > > テーブルに対して一切の操作を行っていない、つまり、上記Selectコマンドを連
> > > 続実行した場合でも、毎回同程度の容量が確保されています。
> > 
> > これは、実行する毎にメモリー使用量が増えていくということです
> > か?たとえば、↑の「データサイズ250MBのテーブルが1つ」のとき
> > は
> > 
> >   * 1回実行したら初期状態から135MB増え、
> >   * 2回実行したら初期状態から270MB増え、
> >   * 3回実行したら初期状態から405MB増え、
> >   * ...
> > 
> > ということですか?であればメモリーリークな気がするので調べて
> > 直した方がよさそうに思っています。
> 
> いいえ。1回目を実行して5秒後に2回目を実行してもメモリー使用量が変わらなかったとい
> うことです。
> ドキュメントの
>  メモリー上に多くの変更があるなら、それらをディスクに書き出す処理は重い処理になります。
> の記述から、このコマンドを実行してからDBに一切変更が加えられていない場合、次回実行
> 時には殆どリソースを消費しない(処理が軽い)と考えていました。
> 上記の例で言うと、1回目が135MBなら、DBに変更を加えていない状態で実行された2回目は、
> ほぼ0MBとなるはず、といった感じです。
> 
> > -- 
> > 須藤 功平 <kou****@clear*****>
> > 株式会社クリアコード <http://www.clear-code.com/>
> > 10周年祝いイベント: https://clear-code.doorkeeper.jp/events/48646
> > 
> > Groongaベースの全文検索システムを総合サポート:
> >   http://groonga.org/ja/support/
> > パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
> >   http://www.clear-code.com/recruitment/
> > 
> > _______________________________________________
> > groonga-dev mailing list
> > groon****@lists*****
> > http://lists.osdn.me/mailman/listinfo/groonga-dev
> 
> ----------------------------- 
> 高見 直輝 <takam****@orega*****>
> 株式会社オレガ
> TEL:03-3267-0150
> FAX:03-3267-0180
> 
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev

----------------------------- 
高見 直輝 <takam****@orega*****>
株式会社オレガ
TEL:03-3267-0150
FAX:03-3267-0180




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