[Ludia-users 124] Re: 形態素インデックスで投入に1秒以上かかります

Back to archive index

kousa****@nttda***** kousa****@nttda*****
2007年 10月 29日 (月) 08:52:35 JST


幸坂です。こんにちは。

こちらでも、
> ludia 1.2.0
> Senna 1.0.9
> mecab 0.96
> mecab-ipadic 2.7.0 20070801
EUC-JP
ludia.initial_n_segments = 2048
shared_buffers = 512MB
200Kbyte 10万レコード
のインデックス構築(copyした後、create index)を行ってみましたが、
状況は再現できませんでした。
ludia1.3.1も同様でした。


> LOG:  pgsenna2: |A| malloc fail (139096976)=(nil) (inv.c:934) <12770>
> ERROR:  pgsenna2: sen_index_upd failed while do_insert (1)
エラー内容はmallocに失敗しましたというものです。
原因として、1プロセスの使用メモリの制限(32bitマシンの場合2Gbyte)を
超えてmallocを試みたという事が考えられます。
インデックス構築中のメモリ使用量はどのようになっていますか?

また、postgresql.confのshared_buffersの値はいくつにしていますか?
この値とSennaのメモリ使用量の合計が2Gを超えると、
上記のエラーが出る可能性があります。


> PostgreSQLのデータベースクラスタの領域以外にファイルが作られることは
> あるのでしょうか?
テーブルスペースをデータベースクラスタ以外の場所に作成した場合を除いて、
データベースクラスタの領域以外にファイルが作られることはありません。


インデックスサイズが非常に大きい場合(数GByte)は、
パーティショニングを行うと、インデックス構築の時間短縮になります。
http://www.postgresql.jp/document/pg825doc/html/ddl-partitioning.html
この方法も試してみたらいかがでしょうか。

以上です。

> -----Original Message-----
> From: ludia****@lists***** 
> [mailto:ludia****@lists*****] On Behalf 
> Of Shunsuke Tanaka
> Sent: Thursday, October 18, 2007 2:36 PM
> To: ludia****@lists*****
> Subject: [Ludia-users 119] Re: 形態素インデックスで投入に1秒以上かかります
> 
> 田中です。
> 
> 返信ありがとうございます。
> 
> > > デフォルト設定(initial_n_segments=512)で実施したところ、15万件ほど投入
し
> > > たところで下記のエラーが出ました。
> > > 
> > > LOG:  pgsenna2: |A| malloc fail (132633168)=(nil) 
> (inv.c:934) <605>
> > > ERROR:  pgsenna2: sen_index_update failed 
> > 
> > 返信が遅くなってすみません。
> > もしかすると、
> > バージョン1.3のマルチカラムインデックス対応で改変した部分が
> > 関係しているかもしれません。
> > 
> > 可能であれば、
> > 一度ludia-1.2.0を使って試してみていただけないでしょうか。
>  
> ludia-1.2.0で試してみましたが、同じように、15万件ほど投入したところで
> 下記のエラーが出て投入ができなくなりました。
> ※エラーが出て投入できなくなった件数は完全に同じではなく、
>   数千件程度の差があります。
> 
> LOG:  pgsenna2: |A| malloc fail (139096976)=(nil) (inv.c:934) <12770>
> ERROR:  pgsenna2: sen_index_upd failed while do_insert (1)
> 
> なお、他のソフトウェアのバージョンは以下の通りです。
> Senna 1.0.9
> mecab 0.96
> mecab-ipadic 2.7.0 20070801
> PostgreSQL 8.2.4
>  
> > > そこで、initial_n_segments=2048、max_n_index_cache=64に設定して、
> > > もう一度行ったところ、15万件ほど投入したところで、
> > > 突然、ルートファイルシステムが読み取り専用になってしまい、
> > > 投入するプロセスが異常終了するという結果になりました。
> > 
> > もしテストする過程で不要になったインデックスファイルが
> > ディスクにたまってしまっている場合、
> > psql等で不要なインデックスをDROPしたあと、
> > 以下の要領でクリーンアップしてみてください。
> > 
> >   # SELECT pgs2destroy();
> 
> 1つのテストを終えたら、データベースクラスタを破棄して、
> 次のテストではデータベースクラスタを新しく作り直して行っています。
> テスト時に不要になったインデックスファイルはないと思いますので、
> クリーンアップの必要もないと思いますが。
> PostgreSQLのデータベースクラスタの領域以外にファイルが作られることは
> あるのでしょうか?
> 
> よろしくお願いします。
> 
> _______________________________________________
> Ludia-users mailing list
> Ludia****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/ludia-users
> 




Ludia-users メーリングリストの案内
Back to archive index