web-dev-qa-db-ja.com

データベース全体をメモリにロードする方法は?

データベース全体をメモリにロードしたいのですが、どうすればいいですか?約256 GBのメモリがあり、私のデータベースは約200 GBなので、メモリ内で簡単に処理できます。

select count(*) from table1を実行すると、sqlserverはテーブルをメモリに自動的にロードします。その後、テーブルを非常に高速に使用できますが、データベース全体をメモリにロードする方法を知りたいですか?

各テーブルでselect count(*) fromを実行すると、より速く作業できますが、データベース全体をメモリにロードする他の方法はありますか?テーブルごとにselect count(*) fromではなく、単一のコマンドでデータベース全体をロードしたい。

1
John Doe

データベース全体をメモリにロードしたいのですが、どうすればいいですか?

何かを行う「方法」を理解する前に、何かを行う必要がある「理由」を明確にすることがしばしば最善です。では、なぜデータベース全体をメモリにロードしたいのでしょうか?メモリは有限のリソースであるため、効率的/賢く使用する必要があります。

約256 GBのメモリがあり、データベースは約200 GBなので、メモリ内で簡単に処理できます

さて、56 GBのRAM=データベースのサイズを超えているようです。しかし、データ自体の外では考慮されていないものを次に示します。

  • 会社が廃業しない限り、たとえ古いデータをアーカイブしていても、データベースは成長します。 56 GBではすぐに足りなくなりますよね?
  • OSにはメモリが必要です(Windowsとスケジュールされたタスクなどの関連サービス)
  • サードパーティのソフトウェアが必要とするメモリ(監視、ウイルス対策など)
  • データベースエンジンプロセスを実行するにはメモリが必要です(MSSQLSERVERまたはInstanceName NTサービス)
  • SQL Serverエージェントプロセスを実行するにはメモリが必要です
  • 各接続/セッションには、ある程度のメモリが必要です
  • クエリにはメモリが必要です(クエリプランの「メモリ許可」を見てください):
    • 集計操作
    • 計算
    • 仕分け
  • オブジェクトが他のオブジェクトを呼び出すと、SQL Serverは各親コンテキストの呼び出しスタックを維持するため、現在のコンテキストが完了したときに、制御をその親コン​​テキストに戻すことができます。この呼び出しスタックはメモリで管理されます。
  • クエリプランキャッシュ
  • DMV統計/情報
  • 結果セット(または、少なくとも各プロセスが現在ある各結果セット内の位置へのポインター)

ここで、その200 GBのデータに関して、これを考慮する必要があります。all 200 GBのデータを使用しますか?疑わしい。データページをメモリに読み込んで参照しないと、効率が悪く無駄になります。必要に応じてページをロードする方がはるかに優れています。ページを取得するために使用されたディスクI/Oと、それらが使用するメモリは、どちらも必要ないページで無駄にしないため、これらのリソースの両方に値するからです。

テーブルごとに_SELECT *_ではなく、単一のコマンドでデータベース全体をロードしたい。

いいえ、これを行う単一のコマンドはありません。

また、SELECT COUNT(*)メソッドはこの目標を達成することすらできません。それが行うすべては、スキャンを介して、それが見つけることができる最小のオブジェクトをロードすることです。しかし、ロードされません:

  • メモリへのインデックス(テーブルをスキャンする場合)またはテーブル自体をメモリへ(インデックスをスキャンする場合)、またはCOUNT(*)操作でスキャンされなかったオブジェクト。したがって、COUNT(*)操作に非クラスタ化インデックスが使用されている場合は、すべての非クラスタ化インデックスのインデックススキャンやテーブル/クラスタ化インデックススキャンを強制する方法を見つける必要があります。しかし、それらは常に使用されるとは限らないだけでなく、毎回それらをロードすると、実際に使用されていないインデックスを特定するためのインデックスDMVを使用する能力に反するため、さらに無駄になります!
  • 行外LOBデータページ(おそらくオーバーフローページではない)。 LOB列を個別に選択し、オーバーフローデータのある可変長列を選択する必要があります。
4
Solomon Rutzky

RAMを「Ram Drive」としてサードパーティのソフトウェアを使用して変換できます。テスト目的で使用したものは「RamDisk」と呼ばれ、Googleで検索できます。はい読み取り/書き込みの速度が約5/10倍高速になりますが、停電が発生するとデータが失われるだけです。重要なデータを保存している場合は、常にバックアップを使用してください。

0
Liakat