11

10GBのRAMを搭載した64ビットマシンで実行されているSQLServer200864ビットでホストされているデータベースでストレステストを実施しています。

400スレッドあります。各スレッドは毎秒データベースにクエリを実行しますが、SQLプロファイラーが言うように、クエリ時間はかかりませんが、18時間後、SQLServerは7.2GBのRAMと7.2GBの仮想メモリを消費します。

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

4

4 に答える 4

27

SQL Server は、可能な限り多くのメモリを使用して、大量のデータをメモリにキャッシュすることでパフォーマンスを向上させるように設計されています。SQL Server 専用のマシンを使用することをお勧めします。これは、他の誰かがメモリを必要とすることを想定していないため、これは完全に有効なアプローチになります。したがって、これについて心配する必要はありません。それは完全に正常です。

とはいえ、ライブ環境ではなく開発マシンを使用している場合は、メモリの量を制限して、ボックスが乗っ取られないようにすることをお勧めします。この場合、最も簡単な方法は、SQL Server Management Studio を開き、サーバーを右クリックして [プロパティ] を選択し、[メモリ] タブで最大サーバー メモリを設定することです。

于 2009-05-13T07:46:16.627 に答える
4

実は、探しているものを取得するための巧妙な小さなトリックがあります。問題/質問は、SQL Serverが積極的に必要としない可能性のあるメモリを「一時的に」放棄し、必要に応じて再消費させる方法です。

これを行うには、次のスクリプトを実行します。

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

{low water mark} と {high water mark} (MB 単位) に独自の値を入力します。

これにより、メモリが最小量に強制的に削減され、SQL Server が必要または必要とする場合はすぐに再度開きます。

あとは、スクリプトを定期的に実行するようにスケジュールするだけです。

おすすめ:

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

于 2011-01-07T19:49:38.893 に答える
1

グレッグの答えから外れて、メモリを構成するときは、OS 用にメモリ全体の少なくとも 10% を空けるようにしてください。長いクエリで SQL が制御不能になった場合は、そのクッションがリモートで接続できるようにし、ボックスを管理できるようにする必要があります。

于 2009-05-15T12:08:50.357 に答える
0

http://support.microsoft.com/kb/961323

これがこの問題の解決策だと思います。累積的な更新をお勧めします。 http://hotfixv4.microsoft.com/SQL%20Server%202008/nosp/SQL_Server_2008_Cumulative_Update_3/10.00.1787.00/free/370328_intl_x64_zip.exe

于 2012-04-23T05:36:48.543 に答える