2012-01-19 8 views
3

C++ベースのプロジェクトで組み込みデータベースとしてSqlite3を使用しています。 sqlite3インターフェイス(ログレコードを実際にコミットするインターフェイス)を使用するプロセスは、データベースのサイズが大きくなるにつれてヒープメモリを拡張するように見えます。埋め込みシステムのSqlite3 - プロセスメモリが増加しますか?

ヒープメモリの拡張は、データベースのサイズに直接関係しています(証拠:「データベースへの挿入」行がコメントアウトされていない場合、展開が行われない場合、およびログラッピングが有効な場合、拡張が終了したかのように展開停止をラップします)。

私たちはUNIXのようなOSを使用しています。

UNIXがこのような処理を行っている場合や、まったく問題がある場合は、SQLite3が何らかのキャッシングを実行できるかどうかは知りませんか?ここの心配は明らかにヒープメモリが枯渇し、システムがクラッシュする可能性があります。

私は、UNIXキャッシュの項目自体が奇妙に参照されていて、それ以外の場合にはキャッシュ関連のメモリを解放していますが、それが本当であると確信するほど十分にはわかりません。 SQLite3のドキュメントに関連するものは見つかりませんでした。

答えて

2

数日後に、この問題を緩和するために、データベース作成時または接続開始前にプラグマを使用できると判断しました。誰もこの投稿にコメントしていないので、私はそれを受け入れられた答えとして投稿します。

これをsqlite3インターフェイスで設定し、0またはそれ以上の数値を設定します。

PRAGMA cache_size=0; 

データベースサイズに応じてプロセスメモリが増加しないようにします。どうやら、 "デフォルト"のキャッシュ制限があるとしても、sqlite3をクロスコンパイルする際に使用されるコンパイルオプションのために、無効にされているか、私たちの実装ではうまく機能していませんでした。プラグマを設定すると、プロセスサイズの増加を止めるための制限が適切に適用されます。ここで

は、より多くの情報のための参照です:

http://www.sqlite.org/pragma.html#pragma_cache_size

関連する問題