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