読み取り専用データベーステーブルをメモリにロードします
-
09-06-2019 - |
質問
私のアプリケーションの 1 つには、参照データに使用される 1 GB のデータベース テーブルがあります。そのテーブルからは大量の読み取りが行われますが、書き込みは一度もありません。ディスクからアクセスする必要がないようにデータをRAMにロードできる方法はあるだろうかと考えていました。
SQL Server 2005 を使用しています
解決
十分な RAM がある場合、SQL は RAM に何をロードするか、ディスク上で何をシークするかを決定する優れた仕事をします。
この質問はよく聞かれますが、プロセスがどの「コア」で実行されるかを手動で設定しようとしていた人々を思い出させます。つまり、OS (この場合は DB) に設計どおりの動作をさせることです。
SQL が実際にルックアップ データをキャッシュから読み取っていることを確認したい場合は、負荷テストを開始して Sysinternals を使用できます。 ファイルモン, プロセスエクスプローラー そして プロセスモニター 1GB テーブルが読み取られていないことを確認します。このため、「ルックアップ」データを別のファイル グループに配置して、ディスク上でデータがアクセスされているときの監視を非常に簡単にすることがあります。
お役に立てれば。
他のヒント
memcached を見てみましょう。これは、多くの巨大な (そして十分な規模の) サイトがこのような問題を処理するために使用していたものです。予備のサーバーがいくつかある場合は、ほとんどのデータをメモリ内に保持するように簡単にセットアップできます。
http://en.wikipedia.org/wiki/Memcached
SQL2005 以降の問題を明確にするために、次のようにします。
この機能は、SQL Serverバージョン6.5のパフォーマンスのために導入されました。DBCCピント可能には、非常に不要な副作用があります。これらには、バッファープールに損傷を与える可能性があります。DBCCピント可能は不要であり、追加の問題を防ぐために削除されています。このコマンドの構文は引き続き機能しますが、サーバーには影響しません。
DBCC ピンタブル テーブルがキャッシュされたままであることを確認したい場合は、テーブルをコアに明示的に固定します。