サーバー メモリの構成オプション

適用対象:yesSQL Server (サポートされているすべてのバージョン)

SQL Server のインスタンスで使用される SQL Server プロセス用のメモリ量を MB 単位で再構成します。 サーバー メモリオプションには、min server memorymax server memory の 2 つがあります。 これらのオプションによって、SQL Server Memory Manager で SQL Server プロセスに割り当てることができるメモリの量が変更されます。

これらのオプションの既定の設定と最小許容値は次のとおりです。

オプション Default 最小許容値
min server memory 0 0
max server memory 2,147,483,647 メガバイト (MB) 128 MB

既定では、 SQL Server は使用可能なシステム リソースに基づいて、必要なメモリを動的に変更できます。 詳細については、「動的メモリ管理」を参照してください。

重要

max server memory 値の設定が高すぎると、SQL Server の単一インスタンスと、同じホストの他の SQL Server インスタンスでメモリの競合が発生することがあります。 ただし、この値の設定が低すぎても、メモリやパフォーマンス関連の大きな問題が発生する可能性があります。 max server memory を最小値に設定すると、SQL Server が起動できなくなることもあります。 このオプションの変更後に SQL Server を起動できなくなった場合は、-f 起動オプションを使用して起動し、max server memory を元の値に戻します。 詳細については、「 データベース エンジン サービスのスタートアップ オプション」を参照してください。

SQL Server はメモリを動的に使用できますが、手動でメモリ オプションを設定して SQL Server がアクセスできるメモリの量を制限こともできます。 この場合は、 SQL Server 用のメモリ量を設定する前に、OS に必要なメモリ、max_server_memory で制御されないメモリ割り当てに必要なメモリ、SQL Server の他のインスタンス (およびコンピューターが SQL Server 専用でない場合は他のシステム) に必要なメモリの量を物理メモリ全体から差し引いて適切なメモリ設定を決定します。 この差が、現在の SQL Server インスタンスに割り当てることができる最大メモリ量です。

オプションの手動設定

サーバー オプションの min server memorymax server memory を設定して、メモリ範囲を与えることができます。 この方法は、システム管理者またはデータベース管理者が同じホスト上で実行する他のアプリケーションまたは SQL Server の他のインスタンスに必要なメモリと合わせて SQL Server のインスタンスを構成する場合に便利です。

Note

min server memory および max server memory は拡張オプションです。 sp_configure システム ストアド プロシージャを使用してこれらの設定を変更するには、 show advanced options を 1 に設定する必要があります。 これらの設定は、サーバーを再起動しなくてもすぐに有効になります。

min_server_memory を使用すると、SQL Server インスタンス用に SQL Server Memory Manager で使用できる最小メモリ量を確保できます。 SQL Server は、 min server memory で指定されたメモリ量を起動時にすぐに割り当てるわけではありません。 ただし、クライアントの負荷によってメモリの使用量がこの値に達すると、 SQL Server min server memory の値を小さくしない限り、 はメモリを解放できません。 たとえば、SQL Server の複数のインスタンスが同じホストに同時に存在するとき、インスタンスのメモリを予約する目的で、max_server_memory の代わりに min_server_memory パラメーターを設定します。 また、基礎をなすホストからのメモリ負荷が高いために、ゲスト SQL Server 仮想マシン (VM) のバッファー プールから十分なパフォーマンスに必要な量を超えるメモリが割り当て解除される事態を回避するために、min_server_memory 値の設定は仮想環境で必要不可欠となります。

注意

SQL Server は、min server memory で指定されたメモリ量を必ず割り当てるわけではありません。 サーバーの負荷が min server memoryで指定されたメモリ量の割り当てを必要としない場合、 SQL Server はより少ないメモリで実行します。

max_server_memory を利用し、OS に好ましくないメモリ負荷が発生しないようにします。 最大サーバー メモリ構成を設定するには、メモリ要件を判断する目的で、SQL Server の全体的使用量を観察します。 初期構成の場合、または SQL Server プロセスのメモリ使用量を長期にわたって収集する機会がなかった場合は、次の一般的なベスト プラクティスのアプローチを使用して、1 つのインスタンスに対して max_server_memory を構成します。

  • 合計の OS メモリから、max server memory で制御されない、潜在的な SQL Server スレッドのメモリ割り当ての相当分 (スタック サイズ 1 * 最大ワーカー スレッド 2) を差し引きます。
  • 次に、バックアップ バッファー、拡張ストアド プロシージャ DLL、オートメーション プロシージャ (sp_OA 呼び出し) を使って作成されたオブジェクト、リンク サーバー プロバイダーからの割り当てなど、max server memory で制御されないその他のメモリ割り当て分として 25% を差し引きます。 これは一般的な概算値であり、実際には異なる場合があります。
  • 残ったものが単一インスタンス セットアップの max_server_memory 設定になります。

1 アーキテクチャあたりのスレッド スタック サイズについては、「メモリ管理アーキテクチャ ガイド」を参照してください。

2 現在のホストで関連付けられている所与の CPU 数に対して計算される既定のワーカー スレッドについては、ドキュメント ページの「max worker threads サーバー構成オプションの構成」を参照してください。

SQL Server Management Studio を使用します

min server memory および max server memoryの 2 つのサーバー メモリ オプションを使用して、SQL Server のインスタンス用に SQL Server Memory Manager によって管理されるメモリ量を MB 単位で再構成します。 既定では、 SQL Server は使用可能なシステム リソースに基づいて、必要なメモリを動的に変更できます。

固定量のメモリを設定するには:

  1. オブジェクト エクスプローラーで、サーバーを右クリックし、 [プロパティ] をクリックします。

  2. [メモリ] ノードをクリックします。

  3. [サーバー メモリ オプション] で、 [最小サーバー メモリ][最大サーバー メモリ] に必要な数値を入力します。

    既定の設定を使用すると、 SQL Server が使用できるシステム リソースに基づいて、そのメモリ要求を動的に変更できるようになります。 max server memory上記のように設定することが推奨されます。

次のスクリーンショットは、3 つの手順すべてを示したものです。

Configure memory in SSMS

Lock Pages in Memory (LPIM)

この Windows ポリシーにより、API にアクセスして物理メモリにデータを保持できるアカウントを指定し、ディスク上の仮想メモリへのデータのページングを防止します。 メモリ内のページをロックすると、ディスクへのメモリのページングが発生した際に、サーバーの応答性を維持できます。 SQL Server Standard エディション以上のインスタンスでは、sqlservr.exe の実行権限があるアカウントに Windows の Lock Pages in Memory (LPIM) ユーザー権利が付与されている場合、Lock Pages in Memory オプションはオンに設定されます。

SQL Server の Lock Pages In Memory オプションを無効にするには、sqlservr.exe (SQL Server 開始アカウント) 開始アカウントを実行する特権のあるアカウントに関して、Lock Pages in Memory ユーザー権利を削除します。

LPIM を使っても、SQL Server 動的メモリ管理には影響が出ません。他のメモリ クラークの要求で拡大縮小できます。 Lock Pages in Memory ユーザー権利を使用するとき、上記のように max server memory の上限を設定することが推奨されます。

重要

LPIM は、sqlservr プロセスがページ アウトされているという兆候があるときに使う必要があります。その場合、次の例のようなエラー 17890 がエラー ログに報告されます: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.

重要

システム内の他のメモリ コンシューマーを考慮していない、不適切に構成された max server memory 設定と共に LPIM を使うと、他のプロセスに必要なメモリの量や、max server memory の範囲外の SQL Server メモリ要件によっては、動作が不安定になる可能性があります。 詳細については、max server memory に関する説明を参照してください。

注意

SQL Server 2012 (11.x) 以降では、Standard Edition で Lock Pages を使用するのにトレース フラグ 845 は必要ありません。

Lock Pages in Memory を有効にするには

lock pages in memory オプションを有効にするには:

  1. [スタート] メニューの [ファイル名を指定して実行] をクリックします。 [開く] ボックスに「 gpedit.msc」と入力します。

    [グループ ポリシー] ダイアログ ボックスが開きます。

  2. [グループ ポリシー] コンソールで [コンピューターの構成] を展開し、次に [Windows の設定] を展開します。

  3. [セキュリティの設定] を展開し、 [ローカル ポリシー] を展開します。

  4. [ユーザー権利の割り当て] フォルダーをクリックします。

    ポリシーが詳細ペインに表示されます。

  5. 詳細ペインで、 [メモリ内のページのロック] をダブルクリックします。

  6. [ローカル セキュリティ ポリシーの設定] ダイアログ ボックスで、sqlservr.exe の実行権限のあるアカウント (SQL Server 開始アカウント) を追加します。

複数の SQL Server インスタンス

データベース エンジンの複数のインスタンスを実行する場合は、3 つの方法でメモリを管理できます。

  • max server memory を使用し、上記のようにメモリ使用量を制御します。 許可する値の合計がコンピューターの合計物理メモリを超えないように注意して、各インスタンスの最大値を設定します。 予測されるワークロードまたはデータベース サイズに比例して、各インスタンスにメモリを割り当てることができます。 この方法の利点は、新しいプロセスまたはインスタンスが起動したときに、直ちに空きメモリを使用できることです。 欠点は、実行していないインスタンスがある場合、残っている空きメモリを実行中のインスタンスが利用できないことです。

  • min server memory を使用し、上記のようにメモリ使用量を制御します。 最小値の合計がコンピューターの合計物理メモリよりも 1 ~ 2 GB 少なくなるように、各インスタンスの最小値を設定します。 この場合も、インスタンスの予測される負荷に比例して、最小値を設定できます。 この方法の利点は、一度にすべてのインスタンスを実行しない場合に、実行中のインスタンスが残っている空きメモリを使用できることです。 また、この方法は、コンピューターの別のプロセスがメモリを集中的に使用する場合にも有効です。少なくとも、妥当なメモリ量を SQL Server が使用できることが保証されます。 欠点は、新しいインスタンス (または他のプロセス) が起動するときに、実行中のインスタンスがメモリを解放するのにしばらく時間がかかる場合があることです。特に、変更されたページをデータベースに書き戻す必要がある場合は時間がかかります。

  • 何も行いません (非推奨)。 ワークロードを伴う最初のインスタンスに、すべてのメモリが割り当てられる傾向があります。 アイドル状態のインスタンスまたは後から起動したインスタンスは、使用可能な最小限のメモリ量だけで実行することになります。 SQL Server は、インスタンス間でメモリ使用量の調整を図ることはありません。 ただし、すべてのインスタンスは、Windows の Memory Notification シグナルに対応して、メモリ使用量を調整します。 Memory Notification API を使用して Windows がアプリケーション間のメモリを調整することはありません。 システムで使用できるメモリに関するグローバルなフィードバックを提供するだけです。

これらの設定はインスタンスを再起動しなくても変更できるので、簡単にいろいろな設定を試して、使用パターンに最適な設定を見つけることができます。

最大メモリ容量の指定

SQL Server のすべてのエディションで、プロセス仮想アドレス空間の制限までメモリを構成できます。 詳細については、「Memory Limits for Windows and Windows Server Releases」 (Windows リリースと Windows Server リリースのメモリ上限) を参照してください。

例 A: max server memory オプションを 4 GB に設定する

次の例では、max server memory オプションを 4 GB に設定します。 sp_configure ではオプションの名前は max server memory (MB) として指定されますが、例では (MB) が省略されていることに注目してください。

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO

これにより、次のようなステートメントが出力されます:

構成オプション 'max server memory (MB)' は 2147483647 から 4096 に変更されました。 RECONFIGURE ステートメントを実行してインストールしてください。

例 B: 現在のメモリ割り当てを確認する

次のクエリでは、現在割り当てられているメモリに関する情報を返します。

SELECT 
  physical_memory_in_use_kb/1024 AS sql_physical_memory_in_use_MB, 
   large_page_allocations_kb/1024 AS sql_large_page_allocations_MB, 
   locked_page_allocations_kb/1024 AS sql_locked_page_allocations_MB,
   virtual_address_space_reserved_kb/1024 AS sql_VAS_reserved_MB, 
   virtual_address_space_committed_kb/1024 AS sql_VAS_committed_MB, 
   virtual_address_space_available_kb/1024 AS sql_VAS_available_MB,
   page_fault_count AS sql_page_fault_count,
   memory_utilization_percentage AS sql_memory_utilization_percentage, 
   process_physical_memory_low AS sql_process_physical_memory_low, 
   process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;  

例 C: 'max server memory (MB)' の値を確認する

次のクエリでは、現在構成されている値と SQL Server で使用中の値に関する情報が返されます。 このクエリでは、'show advanced options' が true であるかどうかに関係なく結果が返されます。

SELECT c.value, c.value_in_use
FROM sys.configurations c WHERE c.[name] = 'max server memory (MB)'

次のステップ

メモリ管理アーキテクチャ ガイド
パフォーマンスの監視とチューニング
RECONFIGURE (Transact-SQL)
サーバー構成オプション (SQL Server)
sp_configure (Transact-SQL)
データベース エンジン サービスのスタートアップ オプション
エディションと SQL Server 2016 のサポートされる機能
エディションと SQL Server 2017 のサポートされる機能
Linux 上の SQL Server 2017 のエディションとサポートされる機能
Windows リリースと Windows Server リリースのメモリ上限