14

遅くなりますか?RAM に収まるデータのみで機能しますか? mongodb インデックスが RAM 以上の場合はどうなりますか?

4

2 に答える 2

16

編集:この回答はもはや適用されません(MongoDBにはこのように動作しない新しいストレージエンジンがあります)、回答は非常に古く、mmapv1ストレージエンジンは非推奨です。

モンゴについて

MongoDBは、メモリマップトファイルを使用します。

これは、オペレーティングシステムが基本的に、メモリのページインおよびページアウト(ディスクとの間)を制御することを意味します。

ルール

インデックスとワーキングセットがメモリを超えると、最後に使用されたページ(メモリのセクション)がディスクにフラッシュされます。これにより、メモリに収まる最近使用されたデータのみがすぐに利用できるようになります。

オペレーティングシステムがこれを制御します。

実際のワーキングセットとインデックスがメモリに収まらない場合は、ひどいパフォーマンスが発生しますが、実際には、ワーキングセット(ホットデータ)のサイズは、データセット全体よりもはるかに小さくなります。

このルールに違反しない場合は、インデックスとデータの合計が使用可能なメモリの合計を超えている場合でも、ほとんどの場合、優れたパフォーマンスが得られるはずです。

使い方

メモリにないデータを必要とするクエリが実行されると、そのデータはメモリにページングされ(ディスクから取得され)、パフォーマンスが低下します。

注:これは基本的に、データベースが最初に起動されたときの状況です(コールド)。

そもそもメモリには何もありません。データが必要なときにページフォールトが発生し、必要に応じてデータがメモリにページングされます。メモリが不足すると、最後に使用されたページ(チャンク)がメモリからフラッシュされ、より高温の(最近アクセスされた)データが優先されます。

また、インデックスは常に使用されており、常に最近使用されているため、実質的にページアウトされることはありません。

于 2012-04-12T21:44:58.563 に答える
6

インデックスが使用可能な RAM よりも大きい場合、パフォーマンスは急速に低下します。MongoDB サイトでは、「インデックスが RAM に収まるようにしてください」と具体的にアドバイスしています。

クエリが遅いと思われる場合は、インデックスが RAM に収まるほど小さいことを確認する必要があります。たとえば、4 GB の RAM で実行していて、3 GB のインデックスがある場合、インデックスはおそらく RAM に収まりません。RAM を追加したり、作成したすべてのインデックスが実際に使用されていることを確認したりする必要がある場合があります。

于 2012-04-13T02:37:36.213 に答える