サーバー メモリに関するサーバー構成オプション

min server memory および max server memory の 2 つのサーバー メモリ オプションを使用して、SQL Server のインスタンスで使用される SQL Server プロセス用に SQL Server Memory Manager によって管理されるメモリ量を MB 単位で再構成します。

min server memory の既定の設定は 0 MB で、max server memory の既定の設定は 2,147,483,647 MB です。 既定では、使用可能なシステム リソースに基づいて、必要なメモリ量が動的に変更されるようになっています。

注意

max server memory を最小値に設定すると、SQL Server のパフォーマンスが極端に悪化し、場合によっては起動できなくなります。 このオプションの変更後に SQL Server を起動できなくなった場合は、–f 起動オプションを使用して起動し、max server memory を元の値に戻します。 詳細については、「データベース エンジン サービスのスタートアップ オプション」を参照してください。

メモリを動的に使用する場合、SQL Server はシステムに定期的にクエリして、メモリの空き容量を確認します。 このようにメモリの空き容量を維持することによって、オペレーティング システム (OS) のページングが防止されます。 空きメモリが少ない場合、SQL Server は OS に対してメモリを解放します。 空きメモリが多い場合、SQL Server はより多くのメモリを割り当てることができます。SQL Server によってメモリが追加されるのは、ワークロードが高いためにメモリを増やす必要がある場合だけです。アクティブでないサーバーの仮想アドレス空間のサイズは増えません。

現在使用されているメモリを返すクエリについては例 B を参照してください。 max server memory は、バッファー プール、コンパイル メモリ、すべてのキャッシュ、QE メモリ付与、ロック マネージャー メモリ、また CLR メモリ (sys.dm_os_memory_clerks にあるメモリ クラークは基本的にすべて) を含む SQL Server メモリ割り当てを制御します。 スレッド スタック、メモリ ヒープ、SQL Server 以外のリンク サーバー プロバイダーのメモリ、また非 SQL Server DLL によって割り当てられたメモリは、max server memory によって制御されません。

SQL Server では、メモリ通知 API QueryMemoryResourceNotification を使用して、いつ SQL Server Memory Manager がメモリの割り当てまたは解放を行うことができるかを判断します。

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

メモリ オプションの手動設定

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

min server memory を使用すると、SQL Server インスタンス用に SQL Server Memory Manager で使用できる最小メモリ量を確保できます。 SQL Server は、min server memory で指定されたメモリ量を起動時にすぐに割り当てるわけではありません。 ただし、クライアントの負荷によってメモリの使用量がこの値に達すると、min server memory の値を小さくしない限り、SQL Server はメモリを解放できません。

注意

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

OS の種類

max server memory に設定できるの最小メモリ量

32 ビット

64 MB

64 ビット

128 MB

SQL Server Management Studio を使用して、メモリ オプションを構成する方法

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

固定量のメモリを構成する手順

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

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

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

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

    既定の設定を使用すると、SQL Server が使用できるシステム リソースに基づいて、そのメモリ要求を動的に変更できるようになります。 min server memory の既定の設定は 0 MB で、max server memory の既定の設定は 2,147,483,647 MB です。

ネットワーク アプリケーションのデータ スループットの最大化

SQL Server のシステム メモリ使用量を最適化するには、ファイルのキャッシュに使用されるメモリ量を制限する必要があります。 ファイル システム キャッシュを制限するには、[ファイル共有のデータ スループットを最大にする] が選択されていないことを確認します。 最小のファイル システム キャッシュを指定するには、[メモリの使用を最小にする] または [バランスをとる] を選択します。

オペレーティング システムの現在の設定を確認するには

  1. [スタート] ボタンをクリックし、[コントロール パネル] をクリックします。次に [ネットワーク接続] をダブルクリックして、[ローカル エリア接続] をダブルクリックします。

  2. [全般] タブで [プロパティ] をクリックし、[Microsoft ネットワーク用ファイルとプリンター共有] を選択して、[プロパティ] をクリックします。

  3. [ネットワーク アプリケーションのデータ スループットを最大にする] が選択されている場合は、他のオプションを選択して [OK] をクリックし、すべてのダイアログ ボックスを閉じます。

lock pages in memory

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

SQL Server の Lock Pages In Memory オプションを無効にするには、SQL Server 開始アカウントに対する "Locked Pages in Memory" ユーザー権利を削除します。

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

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

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

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

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

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

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

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

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

  6. [ローカル セキュリティ ポリシーの設定] ダイアログ ボックスで、sqlservr.exe の実行権限のあるアカウントを選択し、[削除] をクリックします。

仮想メモリ マネージャー

32 ビット オペレーティング システムでは、4 GB の仮想アドレス空間にアクセスできます。 仮想メモリの 2 GB はプロセスごとに専有され、アプリケーションで使用できます。 残りの 2 GB はオペレーティング システムが使用するために予約されています。 すべてのオペレーティング システムのエディションには、オペレーティング システム用の仮想メモリを 1 GB に制限して、アプリケーションで 3 GB の仮想アドレス空間にアクセスできるようにするスイッチが含まれています。 スイッチのメモリ構成の使用方法については、4 GB チューニング (4GT) に関する Windows のマニュアルを参照してください。 32 ビットの SQL Server を 64 ビット オペレーティング システム上で実行する場合、ユーザーは 4 GB の仮想アドレス空間をすべて使用できます。

Windows 仮想メモリ マネージャー (VMM) は、使用可能な物理メモリにコミット済みのアドレス空間をマップします。

さまざまなオペレーティング システムでサポートされている物理メモリ量の詳細については、Windows のマニュアルの「Windows のリリース別のメモリ制限」を参照してください。

仮想メモリ システムでは、仮想メモリと物理メモリの比率が 1:1 を超えるような物理メモリの設定を許可しています。 その結果、さまざまな物理メモリ構成のコンピューターで大規模なプログラムを実行できます。 しかし、すべてのプロセスの平均ワーキング セットを合わせた容量よりもはるかに大きな仮想メモリを使用すると、パフォーマンスが低下する可能性があります。

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

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 に対する最大メモリ容量の指定

32 ビット

64 ビット

コンベンショナル メモリ

SQL Server のすべてのエディションでプロセス仮想アドレス空間制限まで:

  • 2 GB

  • 3 GB (/3gb のブート パラメーターを使用する場合)1

  • 4 GB (WOW64 の場合)2

SQL Server のすべてのエディションでプロセス仮想アドレス空間制限まで:

  • 8 TB (x64 アーキテクチャの場合)

1 /3gb は、オペレーティング システムのブート パラメーターです。 詳細については、MSDN ライブラリを参照してください。

2 WOW64 (Windows on Windows 64) は、32 ビットの SQL Server が 64 ビットのオペレーティング システムで実行される場合のモードです。 詳細については、MSDN ライブラリを参照してください。

使用例

例 A

次の例では、max server memory オプションを 4 GB に設定します。

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

例 B。現在のメモリ割り当ての判別

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

SELECT
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory;

関連項目

参照

RECONFIGURE (Transact-SQL)

sp_configure (Transact-SQL)

概念

パフォーマンスの監視とチューニング

サーバー構成オプション