高見 直輝
takam****@orega*****
2016年 7月 12日 (火) 18:40:33 JST
高見です。 > >> 念のための補足ですが、一度開くと今後は開いたテーブル・カラム > >> を使いまわすので、上述のSELECT分を実行するごとにメモリー使用 > >> 量が増え続けることはありません。1回目のSELECT分で増え、それ > >> 以降は一定です。(一時的に確保するメモリーはありますが、それ > >> らは処理が終わったら開放します。) > > > > この"一定のメモリ使用量"は、テーブルのレコード数によって増加するのでしょ > > うか?それとも、レコードに登録されている文字列の合計サイズによって増加す > > るのでしょうか? > > どちらでも増加しえます。わかりやすい確認方法は、*.pgrn.*ファ > イルが増えたら増加したという感じです。 インデックスのデータ量が一定値を超えるとpgrnファイルが増加するということ でしょうか? そうであれば、増加するときのファイルサイズを教えてください。 ※増加するときのレコード数を、ある程度把握する必要があるためです。 > > "メモリー上にだけある変更“の総量はGroongaデータベースを変更した量(又は > > 回数)に比例すると思っていました。 > > だいたいはそれであっています。 > OSが自動的に変更をディスクに書き出すこともあるため、それが動 > いた時は比例しません。 > > > OSが自動的に書き出す処理は、io_flushを引数無しで実行したものと同じ、全テー > > ブルの分を一括処理するものなのでしょうか? > > Windowsの内部の話なので確かなことはわかりませんが、一括処理 > ではないと思います。一部のみを書き出すということもあり得ると > 思います。たぶん、一番効率のよい(と思われる)方法を使うと思 > います。 メモリが足りない環境下では、メモリを大量確保する選択肢は採られ難い、といっ たところでしょうか。 > > 運用上、使われるテーブルが一部に限られる可能性は高いのですが、テーブル数 > > に上限が無い仕様となっているので、全テーブルに対してSELECTが実行されるも > > のと考える必要があります。 > > ただ、検索が終わった後にテーブルを開いたままにしておく必要は無いので、テー > > ブルを閉じることが出来るのであれば、プログラムによる対応も可能になります。 > > SELECTの実行後にquitコマンドを実行すれば良いのでしょうか? > > 確認していないのですが、 > > SELECT pgroonga.command("database_unmap"); > > で開いているテーブル・カラムをすべて閉じることができるので、 > これがよさそうな気がします。 io_flushコマンドの直前に実行してみましたが、特にメモリ使用量に変わりはあ りませんでした。 > >> DDLを教えてもらえればどんなio_flushを発行すれば網羅できてい > >> るかを伝えることができます。 > > > > Sources〜に対して実行した後、データベースに対して実行してます。 > > 他に必要な処理はありますか? > > Sources*に対応するインデックスカラムとそれらのカラムに対する > テーブルにもio_flushすれば大丈夫だと思います。 具体的には『Lexicon*』テーブルでしょうか? ----------------------------- 高見 直輝 <takam****@orega*****> 株式会社オレガ TEL:03-3267-0150 FAX:03-3267-0180