Shunsuke Tanaka
tanak****@nttda*****
2007年 10月 29日 (月) 15:24:51 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も同様でした。 試してみてくださり、誠にありがとうございます。 shared_buffers = 512MB にしてみるのと、Linuxカーネルを新しいものにしてみ るのを、トライしてみたいと思います。 > > 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を試みたという事が考えられます。 > インデックス構築中のメモリ使用量はどのようになっていますか? 一番多くメモリを使っているプロセスは、 postgres: postgres ludiatestdb [local] INSERT というプロセスで、900Mbyteくらい使っています (psコマンドの出力のVSZが900MbyteくらでRSSも900Mbyteくらいでした)。 2Gbyteまでは行っていません。 > また、postgresql.confのshared_buffersの値はいくつにしていますか? > この値とSennaのメモリ使用量の合計が2Gを超えると、 > 上記のエラーが出る可能性があります。 postgresql.confのshared_buffersは、デフォルトのままで、24MBです。 一番多くメモリを使っているプロセスのメモリ使用量と足しても2Gは超えません。 > インデックスサイズが非常に大きい場合(数GByte)は、 > パーティショニングを行うと、インデックス構築の時間短縮になります。 > http://www.postgresql.jp/document/pg825doc/html/ddl-partitioning.html > この方法も試してみたらいかがでしょうか。 情報提供ありがとうございます。 1つのテーブルではどうやっても無理という結果になりましたら、 パーティショニングを試してみたいと思います。