DB全体をメモリに収めることはできますか?


9

私のデータベースのサイズは約1GBです(私のデータベースのmdfファイルによると)。データベースサーバーには4 GBのRAMがあります。アクティブ時のコンピューターのメモリ消費量を見ると、使用率は約85%(OSなどを含む)です。

これは、すべてのDB読み取りアクティビティがメモリのみで機能することを意味しますか(つまり、db全体がメモリに座っています)それともディスクに移動する必要がある場合はまだありますか?


1
さて、比較として、アプリケーションがアクティブでない場合の使用法は何ですか?一般に、データベースシステムの利点の1つは、メモリ内の完全なファイルを必要としないことですが、他の場所でフラッシュするまで、メモリから取り出したものに適合します。「いいえ」を宣言する必要があります。
Grant Thomas

@氏。失望:それは利点だと私は同意しますが、(この場合のように)ファイル全体をメモリに配置できる場合は、そうでしょうか?

それが必要な場合は、はい。しかし、当然のことながら、呼び出し元と必要なデータの要求に応じて、ネイティブではありません。したがって、一般に、データベースのメモリに問題がある場合は、呼び出しコードまたはサポートソフトウェア、あるいはその2つが混在していることが原因です。
Grant Thomas

1
見方の例:いくつかの非常に大きなポータルサイトを所有している非常に大きなインターネット会社を知っています。彼らは約配達します。それらのポータル用の独自の広告サーバーからの3億の広告。広告サーバーの構造は、アカウンティングとターゲティングに関するすべての情報を備えた1つの大きなOracle DBがあるような構造ですが、32個の大きな(32GB RAM)サーバーがRAMに小さなデータベース(現在アクティブな広告のみ)を保持しています。彼らはディスクに触れないでください、彼らは触れてはいけません:クエリが入ったときに配置する広告を見つけるのに1/1000秒しかありません。ディスクにアクセスすると、その目標は達成できなくなります。

回答:


5

はい、データベース全体がメモリに格納されている可能性があります。チェックポイント間隔でダーティページをディスクにフラッシュします。ただし、すべての更新はログに書き込み、コミットする前に永続ストレージでログレコードが強化されるのを待つ必要があることに注意してください。この古いペーパーSQL Server 2000 I / O Basicsには、これまでに必要となるすべての詳細が含まれています。

しかし、推測する必要はありません。これを正確に測定して、それが発生するかどうかを確認できます。関連するパフォーマンスカウンターは次のとおりです。

  • ページの平均寿命ページが参照なしでバッファプールに留まる秒数。
  • ページ読み取り/秒 1秒あたりに発行された物理データベースページ読み取りの数。この統計には、すべてのデータベースにわたる物理ページ読み取りの総数が表示されます。物理I / Oは高価であるため、より大きなデータキャッシュ、インテリジェントインデックス、およびより効率的なクエリを使用するか、データベース設計を変更することにより、コストを最小限に抑えることができる場合があります。
  • ページ書き込み/秒 1秒あたりに発行された物理データベースページ書き込みの数。

「はい、データベース全体がメモリに格納されている可能性があります。」したがって、本番サーバーの場合、SQLサーバーマスター内の専用データベースを使用するWebサイトが60個以上あり、これらのほんの一握りでもマシンの使用可能なメモリよりも大きいサイズに相当しますが、どのように機能しますか?私は決定的なデフォルト、またはどちらのシナリオの可能性もないと言いたくなります-私が行った以前のコメントのように、それは本当にエンジンではなく環境に依存しています。
Grant Thomas

@氏。失望:別の質問に私の答えを適用しています。OPは言った:My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.。60のWebサイトがあり、その場合にバッファープールキャッシングがどのように機能するかについての回答が必要な場合は、次の質問をしてください:)
Remus Rusanu

あなたはここの専門家ですが、私の探究的な性質を許してください。この理論は(特定のデータがないため)マシンが他のことをしていないと仮定していますか?または、未知の消費者が使用しているメモリの特定のしきい値を説明しますか?
Grant Thomas

私が言ったように:you don't have to guess, you can measure this exactly
Remus Rusanu

-5

DB全体(データ)はメモリ(SQLサーバー)に保存されません。インデックスやキーを調べた後、探しているデータがデータファイル内のどこにあるかを示すポインターを取得し、ディスクに移動してデータを取得します。キーやインデックスがない場合は、ヒープ全体をスキャンする必要があります。

実行しているSQL Serverのバージョンによっては、ディスクの読み取りを最小限に抑えるために、よく使用されるデータをキャッシュする戦略がある場合があります。

MySqlクラスターデータベースなどのインメモリDBを取得できます。これは、サーバーのクラスター全体でENTIRE dbをメモリーに適合させて、高可用性/災害復旧と高速データ検索を実現するように設計されています。


1
私はこれに反対票を投じるのに十分な担当者がいませんが、なぜあなたがそれが断固としてメモリに格納されないだろうとあなたが言っているのか分かりません。いったんページがバッファキャッシュに読み込まれると、内部または外部メモリの負荷によってキャッシュがトリミングされるまで、ページはそこにとどまります。
マーティン・スミス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.