SQLはRAMが好きですが、Windowsの要求に応じて解放します。これはSQLがどのように機能するかを知っています。しかし、SQLが実際にRAMを返すことを確信していないWindows管理者がいます。この特定の(仮想)サーバーでは、Analysis Servicesが終了するとSQLはそれほど必要ありませんが、このサーバーには他に何も問題はありません。 SQLに多くのことを尋ねてください。
したがって、仮想環境の問題は「SQLがRAMを使いすぎているため」ではないことをWindows管理者に再確認しようとしていますが、サービスを再起動せずにSQLを解放するようにSQLを説得することはできません。
キューブを処理するとき、SQLサービスは8GBのRAMを喜んで使用しますが、それに圧力がかからないため、通常の1日の間、これはほとんど解放されません。 Windowsの人たちは悲鳴を上げており、SQLをリリースするほうがはるかに良いでしょう。
最大のメモリ設定を使用したくないのは、SQLで実際に処理に多くのRAMを使用するためです。後で再び元に戻したいだけです。
SQL Serverがメモリを解放していない と SQL Serverからメモリを解放する の両方の重複である可能性がありますが、別の答えがあるかどうか疑問に思っています。 Windowsがそれを取り戻すのを待つことは、Windowsの連中を説得するつもりはない。サービスの再起動はオプションですが、私は本当にそのアイデアのファンではありません。
Windowsに要求する方法を知りたい...
あなたの唯一の選択肢は、SQLサービスを再起動するか、SQLを強制的に解放するために大量のメモリを消費するアプリケーションを実行することです。
@Nick Kavadiasの提案が気に入っています。メモリ:ページフォールト/秒パフォーマンスカウンターを監視して、SQLがOSのメモリを不足させていないことを示します。
それができることを示す1つの方法は、SQL Serverにすべてのメモリを消費させることです。次に、ネットワーク経由で巨大なファイルをコピーします(これには、大きなSQLバックアップファイルが適切に機能します)。これにより、システムキャッシュがいっぱいになり、WindowsはSQLにメモリを要求し始めます。 SQLは、最小メモリ設定に達するまで、メモリをOSに戻し始めます。
(すみません、Twitter経由で質問全体を取得できませんでした。140文字以上が明らかに必要でした。)
ASとDSエンジンの両方を使用すると、メモリに上限を設定して、安全なしきい値を下回ることができます。これは、RAMまたはSQLの複数のインスタンス、あるいはその両方。少なくともデータベースエンジンでは、メモリキャップを現在の使用量以下に変更すると、サービスを再起動しなくても、オンザフライでメモリ量が削減されます。 SSASについて。
あなたは「キューブ」について言及しているため、ASエンジンとリレーショナルエンジンのどちらについて話しているのかは明確ではありません。リレーショナルエンジンは、必要に応じてメモリを解放できます。
DBCC FREESYSTEMCACHE('<cache name>');
「キャッシュ名」は sys.dm_os_memory_clerks から取得されます。 DBCC FREESYSTEMCACHE の仕様ではガバナープールについてのみ言及していますが、実際にはさらに多くのキャッシュを削除できます。
ただし、すべてのメモリがバッファプールで使用されている場合、バッファプール全体を削除すると、パフォーマンスが大幅に低下し、IO負荷が大きくなります。SQLでこれを処理する方が適切です。
私が見つけた最も簡単な方法は、サーバーのメモリプロパティに移動し、小さい値を入力して適用し、数分待ってから構成を調整し直すことです。
また、SQLサーバーのメモリ使用量を調整すると、ウィンドウにキャッシュ用のより多くのRAMが提供されるため、サーバーのパフォーマンスを実際に改善できることもわかりました。