web-dev-qa-db-ja.com

SQL Serverでデフォルトの最大メモリ2147483647 MB​​の値を維持することは悪い習慣ですか?

そのmsdnページに基づいて: サーバーメモリ設定 動的に保つために、SQLサーバーの最小および最大メモリのデフォルト値を維持することをお勧めします...

チュートリアルで学んだことから、常に最大値を定義する必要があります。最小値についてはあまり聞いたことがありません。単純な古いperfmonを使用してページファイルを監視していますが、めったにディスクスワップが発生しておらず、サーバークラッシュの原因となることがほとんどでした。

SQL Serverのデフォルトの最大メモリ設定に関連している可能性はありますか?データベースのサイズは約150 GB、メモリは48 GBで、そのマシンで実行されている他のアプリケーションはありません。

また、なぜ最小値が必要なのですか?値が小さすぎるとSQL-Serverの起動が妨げられ、SQL-Serverはメモリにデータを保持するので、キャッシュを解放しようとしないことを知っています。

SQL-Server 2012を使用しています、よろしくお願いします!

6
RayofCommand

整理するための詳細

そのmsdnページに基づく:サーバーのメモリ設定動的に保つためにSQL-Serversの最小メモリと最大メモリのデフォルト値を維持することは良い習慣です。

いいえ、書かれていませんgood practiceそれはrecommendedだと言っており、オンラインのMSブックはそれを上手に書くことができないと確信しています。そのほとんど効率的に管理されているものの、大量に消費されるものに制限があるのは良いことです。システムで最大サーバーメモリを定義することをお勧めします。これは、バッファープールを制限し、SQL Serverにバッファープールの最大サイズを通知します。パーティDLLの拡張ストアドプロシージャとリンクサーバー。

Windowsはページファイルを使用して、より大きな仮想メモリセットを提供するために物理メモリとの間でスワップされる一時データを保持します。ページファイルは、OSがコミットしているメモリの量に大きく依存し、設定された最小値と最大値に従って変化します。ページファイルを監視する場合は、perfmonカウンタを使用する必要があります。これを読んでください MSDNブログ

Memory:Committed Bytes-コミットされた仮想メモリのバイト数。これは必ずしもページファイルの使用状況を表すものではありません-プロセスが完全に非常駐にされた場合に使用されるページファイルの容量を表します

メモリ:コミット制限-ページングファイルを拡張せずにコミットできる仮想メモリのバイト数。

ページングファイル:%使用率-コミットされたページングファイルの割合

ページングファイル:使用率のピーク-コミットされたページングファイルの最高の割合

また、なぜ最小値が必要なのですか?値が小さすぎるとSQL-Serverの起動が妨げられ、SQL-Serverはメモリにデータを保持するので、キャッシュを解放しようとしないことを知っています。

最小サーバーメモリは、SQL ServerのインスタンスのSQL Serverメモリマネージャーで使用可能なメモリの最小量です。これは、ウィンドウがメモリ不足に直面しているときにアクティブな画像になり、メモリ不足通知フラグが発生します。 SQLOSはそれに応答し、SQL Serverにメモリ消費を削減してキャッシュを解放するように要求し、SQL Serverは最小サーバーメモリ値まで非優先的に削減します。圧力が高すぎる場合、SQL Serverは高速に反応できず、SQL Serverプロセスがページアウトされます。最小サーバーメモリは、SQL Serverの起動時に、必要でない場合に最小量のメモリを必要とするわけではないことを覚えておいてください。

最小サーバーメモリのその他の用途は、OS /サードパーティのドライバーの動作不良のためにSQL Serverをディスクにページアウトしたくない場合です。 max serverとmin server memoryをほぼ同じ値に設定し、SQL ServerサービスアカウントにLocked pages in memory特権を与えます。この場合、OSがメモリクランチに直面している場合でも、SQL Serverはmin serverに最大トリムし、OSメモリクランチがまだそこにある場合OSプロセスがページアウトされ、非常に遅くなります。 しかし、これは悪いことであり、私はお勧めしません

5
Shanky

MIN値は、複数のインスタンスを持つサーバーがある場合に役立ちます。これを使用して、インスタンスごとのメモリ使用量に優先順位を付けることができます。ただし、主に、SQLで少なくとも作業に必要なメモリが確保されるようにするためです。これにより、サーバーで何かを実行してすべてのメモリを盗むのを防ぎます。

デフォルト設定では基本的にSQL Serverにメモリ割り当てを残しますが、SQLが他のプロセスやOSからメモリを奪う問題が発生しないように、静的な値を設定することをお勧めします。これは、同じサーバーでSSIS、SSAS、SSRS、またはその他のサーバー/アプリケーションを実行している場合に必須です。したがって、サーバーで実行されているOS +サービス+アプリケーションに十分なメモリを残しておく必要があります。

2
James Anderson