sakamoto
sakam****@ma*****
2007年 12月 18日 (火) 19:25:19 JST
坂本です。 幸坂さん、ありがとうございます。 COMMITを切っても、sennaのインデックスは 解放されないということですね。 該当環境では、max_n_index_cacheを105に設定変更しています。 というのも、1インデックスが2Gを超えるとエラーになるので、 分割するようにしたのですが、参照する際には、それらを Viewを使って参照しているので、同時にsennaのインデックスを オープンする数が増えるなあ、ということで。 お話からすると、今回のケースでは、12個目のインデックスで エラーになっているので、それ以下に設定すれば、投入時の エラーは回避できるかも知れませんが、 参照時にmax_n_index_cacheのために同時にオープンできなくて、 または、max_n_index_cacheを増やしても、今度は、1プロセスの メモリ取得でエラーになりそうな雰囲気ですね。 現在、該当環境が無いので、参照系の確認ができず、 歯がゆいのですが、まず、max_n_index_cacheの設定変更で どうなるかの確認は行いたいと思います。 > 幸坂です。こんにちは。 > > 1プロセスのメモリ使用量が原因かもしれません。 > max_n_index_cacheを小さい数字にすると、 > 問題が解決する可能性があります。 > > max_n_index_cacheは1プロセスが開けるインデックス数です。 > この値を超えてインデックスオープンを試みると、 > LRU方式でインデックスをクローズし(sen_index_close)、 > Sennaのメモリを解放します。 > > 以下の内容も参考にしてください。 > http://lists.sourceforge.jp/mailman/archives/ludia-users/2007-October/000110 > .html > http://lists.sourceforge.jp/mailman/archives/ludia-users/2007-October/000123 > .html > >> ちなみに、エラー後、以降の処理を再実行すると正常に格納されます。 > エラーにより接続が切れて、全てのメモリが解放されたため、 > 正常に動作していると思われます。 > >> -----Original Message----- >> From: ludia****@lists***** >> [mailto:ludia****@lists*****] On Behalf >> Of sakamoto >> Sent: Tuesday, December 18, 2007 2:02 PM >> To: ludia****@lists***** >> Subject: [Ludia-users 157]データ投入時にメモリ確保エラー >> >> こんにちは、坂本です。 >> >> Windows上で、次のようなシーケンスで大量にデータ投入を行っています。 >> (Ludia1.2+senna1.0.8) >> >> 1.全文検索インデックス1個を持った表1へデータを順次投入します。 >> 2.インデックスサイズが約512MB近くになると、表1への >> データ投入を終了し、同一の構造を持った表2を作成し、 >> 表2へデータ投入を続けます。 >> 3.表2もインデックスサイズが約512MB近くになると、次に >> 表3を作成し、表3へデータ投入を続けます。 >> 4.このように1表の(1インデックスサイズ)をある程度抑えて、 >> 順次表を追加していく形で大量データの投入を試みています。 >> >> ※1インデックスが2GBを超えると、メモリ確保できずにエラーと >> なる件がありましたが、それを回避するために表を分割しています。 >> また、1インデックスが1GBを超えると更新時の性能が出ない >> こともあり、切り替えの設定を低めにしています。 >> >> 本処理を実行し続けると、途中で、エラーで落ちます。 >> 実際のSQLシーケンスとしては、 >> BEGIN → INSERT (100件程度)→ COMMIT >> を繰り返しています。 >> >> Ludiaログの内容は、次の通りです。 >> >> 2007-10-24 04:40:42 LOG: pgsenna2: |A| malloc fail >> (76836502)=00000000 >> (..\lib\inv.c:922) <9617> >> 2007-10-24 04:40:42 ERROR: pgsenna2: sen_index_upd failed >> while do_insert >> (1) >> 2007-10-24 04:40:42 STATEMENT: INSERT INTO T_CSV_000012 >> (SMGSEQ, PAGENO, >> DATA) VALUES(502724, 1, ' >> >> Ludia1.3.1でメモリの解放に関する修正を行ったということで、 >> これも確認しましたが、同じ場所で、同様に落ちます。 >> >> 2007-10-27 14:09:12 LOG: pgsenna2: |A| malloc fail >> (76836502)=00000000 >> (..\lib\inv.c:922) <9619> >> 2007-10-27 14:09:12 ERROR: pgsenna2: sen_index_update failed 1,0 >> 2007-10-27 14:09:12 STATEMENT: INSERT INTO T_CSV_000012 >> (SMGSEQ, PAGENO, >> DATA) VALUES(502724, 1, ' >> >> 少なくとも、COMMIT時にメモリも解放されて問題なく動作すると >> 考えているのですが、1APから実行することによる弊害があるのでしょうか。 >> 合計は2GBを優に超えています。 >> >> ちなみに、エラー後、以降の処理を再実行すると正常に格納されます。 >> >> 何か考えらること、良い対応方法は無いでしょうか。 >> >> _______________________________________________ >> Ludia-users mailing list >> Ludia****@lists***** >> http://lists.sourceforge.jp/mailman/listinfo/ludia-users >> > > _______________________________________________ > Ludia-users mailing list > Ludia****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/ludia-users