2009-05-13 7 views
11

データベースのストレステストを実施しています。これはSQL Server 2008 64ビットで実行され、10 GBのRAMを搭載した64ビットマシンで実行されます。SQL Server 2008は多くのメモリを消費しますか?

私は400スレッドを持っています。各スレッドは1秒ごとにデータベースにクエリを実行しますが、SQLプロファイラによると時間がかかりませんが、18時間後にはSQL Serverは7.2GBのRAMと7.2GBの仮想メモリを使います。

これは正常な動作ですか? SQL Serverを調整して未使用メモリをクリーンアップするにはどうすればよいですか?

+0

これらの数字はどのように測定していますか?タスクマネージャは誤解を招くような数字を与えることがあります(私は常にperfmonを選択し、プライベート/仮想バイトを参照します) –

+0

タスクマネージャとPerformanceCounterクラスを使用する別個のdotnetアプリケーションを使用してSQLサーバーを監視しています –

答えて

27

SQL Serverは、負荷をメモリにキャッシュしてパフォーマンスを向上させるために、できるだけ多くのメモリを使用するように設計されています。 SQL Server用の専用マシンを使用することをお勧めします。これは、他の誰かがメモリを必要としないため、これを完全に有効な方法にしています。ですから、これについて心配するべきではありません。それは完全に正常です。

つまり、ライブ環境ではなく開発マシンを使用している場合、ボックスを引き継ぐのに必要なメモリ量を制限することができます。この場合、最も簡単な方法は、SQL Server Management Studioを開き、サーバーを右クリックして[プロパティ]を選択し、[メモリ]タブで最大サーバーメモリを設定することです。

1

グレッグの答えを無視して、メモリを構成するときに、OSのメモリ全体の少なくとも10%を空けてください。長いクエリーでSQLが制御不能になった場合は、そのクッションがリモートにできるようにして、ボックスを管理することを望みます。

4

実際には、あなたが探しているものを得るためにきれいな小さなトリックがあります。問題/疑問は、SQL Serverを積極的に必要としないメモリを「一時的に」放棄させ、必要に応じてそれを再開させる方法です。

これを行うには、次のスクリプトを実行します:{低ウォーターマーク}と(MB単位){ハイウォーターマーク}のための独自の値で

EXEC sys.sp_configure N'show advanced options', N'1' 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{low water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'max server memory (MB)', N'{High water mark}' 

GO 

RECONFIGURE WITH OVERRIDE 

GO 

EXEC sys.sp_configure N'show advanced options', N'0' 

RECONFIGURE WITH OVERRIDE 

GO 

入れ。

これはメモリを最小限に抑え、SQL Serverが必要とする場合はすぐに再度開きます。

残っていることは、スクリプトを定期的に実行するようにスケジュールすることです。

勧告:

SQL Serverが頻繁に使用されていない

、6時間ごとに自動的にこれを実行してみてください。頻繁に使用される場合は、24時間ごとに1回実行してください(夜中や1日の始まりの前など)。あなたの使い方は変わります。

関連する問題