2013-02-26 12 views
6

私は、OLAP環境の一部の非常に大きなテーブルでいくつかの集約クエリを実行しています。私は現在、200MB/sのディスクIOでボトルネックになっています。SQL実行前にテーブル全体をRAMにロードするヒント?

これらのクエリは、92 GBのRAMを搭載したマシンで実行しています。基本的には実行前にテーブル全体をRAMにロードするようにSQLに指示するSQLヒントがありますか?以下のような

何か:

は、(RAMディスク)をmytableはSELECT * FROM

私はMS TSQLを使用しています。

+0

['DBCC PINTABLE'](http://msdn.microsoft.com/en-us/library/ms178015(v = sql.90).aspx)これを使用していましたが、現在無効になっています。次のバージョンにはメモリテーブル用のHekatonがあります。あなたはおそらく、最初にRAMにデータをロードするためにボトルネックされているので、クエリが実行されるとRAMにロードするだけでRAMにロードするのに役立つ(妨げになるかもしれない)かどうかは不明です。 –

答えて

2

いいえ。データベースエンジンは、ページキャッシュに十分な領域がある場合、これを自動的に行います。

SQL Server Management Studioを使用して、使用されているメモリ量を設定できます。サーバーを右クリックし、メモリオプションを選択し、 "最小サーバーメモリ"ボックスに大きな数を入力します。 92 GバイトのRAMがあれば、85,000のような数字が良いでしょう。オペレーティングシステムやその他のサービス用の追加メモリをマシンに残す必要があります。

テーブルがメモリに収まると仮定すると、処理が容易になります。彼らが記憶に収まらない場合は、別のアプローチをとる必要があります。

+0

SQLは読み取りキャッシュに入れるものを予測するのに完璧ではないので、このヒントが存在するとクエリのいくつかのケースを大幅にスピードアップする可能性があります。 –

+0

また、他のクラスのクエリでは、RAMに50 GBのテーブルをロードすることは、実際には実行時間の大部分を占めます。ヒント機能を追加するのに最適な状況のようです。 –

+0

@JohnShedletsky。 。 。このようなヒントを得るには、負荷の重い処理を伴うマルチユーザー環境では非常に困難が伴うと思います。スマートキャッシュを持つことは、ソリューションとしてはるかに汎用性があります。しかし、これはそのような議論の場ではありません。 –

関連する問題