メモリの負荷を避けるため、サーバーの最大メモリに上限を設ける - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

メモリの負荷を避けるため、サーバーの最大メモリに上限を設ける

パフォーマンス上の理由から、SQL Server は割り当て済みのメモリを解放しません。SQL Server が起動すると、min_server_memory オプションで指定されたメモリをゆっくりと取り込み、max_server_memory オプションで指定された値に達するまで増やし続けます。(これらの設定の詳細については、SQL Server マニュアルの サーバーメモリ構成オプション を参照してください。)

SQL Server のメモリには、バッファプールと非バッファプール (memory to leave または MTL とも呼ばれる) の 2 つのコンポーネントがあります。[max_server_memory] オプションの値によって、バッファーキャッシュ、プロシージャキャッシュ、プランキャッシュ、バフ構造、その他のキャッシュで構成される SQL Server バッファープールのサイズが決まります。

SQL Server 2012 から、[min_server_memory][max_server_memory] は、SQLGENERALSQLBUFFERPOOLSQLQUERYCOMPILESQLQUERYPLANSQLQUERYEXECSQLOPTIMIZERSQLCLR を含むすべてのキャッシュのすべてのメモリ割り当てを考慮します。max_server_memory にあるメモリクラークの完全なリストについては、Microsoft SQL Server ドキュメントの sys.dm_os_memory_clerks を参照してください。

現在の max_server_memory 値をチェックするには、コマンドを使用する:

$ sp_configure 'max_server_memory'

max_server_memory は、システム全体のメモリ負荷を発生させない値に制限することをおすすめします。すべての環境に適用できる普遍的な公式はないが、このセクションでいくつかのガイドラインを示した。max_server_memory は動的オプションなので、実行時に変更できます。

出発点として、以下のように max_server_memory を決定することができる:

max_server_memory = total_RAM – (memory_for_the_OS + MTL)

各パラメータの意味は次のとおりです。

  • オペレーティングシステムのメモリは 1 ~ 4 GB です。

  • MTL (残すメモリ) にはスタックサイズが含まれ、64 ビットマシンではワーカースレッドあたり 2 MB であり、以下のように計算できる:MTL = stack_size * max_worker_threads

あるいは、これを使うこともできる:

max_server_memory = total_RAM – (1 GB for the OS + memory_basis_amount_of_RAM_on_the_server)

ここで、RAMのメモリ基準量は以下のように決定される:

  • サーバーの RAM が 4 GB から 16 GB の間であれば、4 GB の RAM あたり 1 GB を残します。たとえば、16 GB のサーバーの場合、4 GB を残します。

  • サーバーの RAM が 16 GB を超える場合は、16 GB までの RAM 4 GB につき 1 GB、16 GB を超える RAM 8 GB につき 1 GB を残します。

たとえば、サーバーに 256 GB の RAM が搭載されている場合、計算はこうなる:

  • OS 用の 1 GB

  • 最大 16 GB RAM:16/4 = 4 GB

  • 16 GB 以上の残りの RAM:(256-16)/8 = 30

  • 残す RAM の合計:1 + 4 + 30 = 35 GB

  • 最大サーバーメモリ:256-35 = 221 GB

初期構成後、通常のワークロード期間中に解放できるメモリを監視して、SQL Server に割り当てられるメモリを増減する必要があるかどうかを判断します。

注記

Windows は 96 MB でメモリリソースの不足を通知するので、バッファが欲しいところだが、256 GB 以上の RAM を搭載した大規模サーバーでは、Available Mbytes を 1 GB 以上に設定できます。

追加情報については、Microsoft SQL Server ドキュメントの メモリ管理アーキテクチャガイド を参照してください。