次の方法で共有


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

2 つのサーバー メモリ オプション ( 最小サーバー メモリ最大サーバー メモリ) を使用して、SQL Server のインスタンスによって使用される SQL Server プロセスの SQL Server メモリ マネージャーによって管理されるメモリの量 (メガバイト単位) を再構成します。

最小サーバー メモリの既定の設定は 0 で、最大サーバー メモリの既定の設定は 2147483647 MB です。 既定では、SQL Server は使用可能なシステム リソースに基づいてメモリ要件を動的に変更できます。

最大サーバー メモリを最小値に設定すると、SQL Server のパフォーマンスが大幅に低下し、起動を妨げる可能性があります。 このオプションを変更した後に SQL Server を起動できない場合は、 -f スタートアップ オプションを使用して SQL Server を起動し、 最大サーバー メモリ を以前の値にリセットします。 詳細については、「 データベース エンジン サービスのスタートアップ オプション」を参照してください。

SQL Server がメモリを動的に使用している場合、システムは定期的にクエリを実行して、空きメモリの量を判断します。 この空きメモリを維持することで、オペレーティングシステム (OS) のページングを防ぐことができます。 空きメモリが少ない場合、SQL Server はメモリを OS に解放します。 空きメモリが増える場合、SQL Server により多くのメモリが割り当てられる可能性があります。 SQL Server では、ワークロードにより多くのメモリが必要な場合にのみメモリが追加されます。保存中のサーバーでは、仮想アドレス空間のサイズは増えません。

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

SQL Server では、メモリ通知 API QueryMemoryResourceNotification を使用して、SQL Server メモリ マネージャーがメモリを割り当ててメモリを解放できるタイミングを判断します。

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

メモリ オプションを手動で設定する

サーバー オプションの 最小サーバー メモリ最大サーバー メモリ は、メモリ値の範囲にまたがって設定できます。 この方法は、システム管理者またはデータベース管理者が、他のアプリケーションのメモリ要件、または同じホスト上で実行される SQL Server の他のインスタンスのメモリ要件と組み合わせて SQL Server のインスタンスを構成する場合に役立ちます。

最小サーバー メモリ最大サーバー メモリ オプションは、詳細オプションです。 sp_configure システム ストアド プロシージャを使用してこれらの設定を変更する場合は、詳細オプションの表示が 1 に設定されている場合にのみ変更できます。 これらの設定は、サーバーの再起動なしですぐに有効になります。

min_server_memoryを使用して、SQL Server インスタンスの SQL Server メモリ マネージャーで使用可能な最小メモリ量を保証します。 SQL Server は、起動時に 最小サーバー メモリに指定されたメモリ量をすぐに割り当てません。 ただし、クライアントの負荷によりメモリ使用量がこの値に達すると、 最小サーバー メモリ の値が減らされない限り、SQL Server はメモリを解放できません。 たとえば、SQL Server の複数のインスタンスが同じホストに同時に存在できる場合は、インスタンスのメモリを予約するためにmax_server_memoryではなく、min_server_memory パラメーターを設定します。 また、仮想化環境では、min_server_memory値の設定は、基になるホストからのメモリ負荷が、許容可能なパフォーマンスに必要な量を超えてゲスト SQL Server 仮想マシン (VM) 上のバッファー プールからメモリの割り当てを解除しないようにするために不可欠です。

SQL Server は、 最小サーバー メモリで指定されたメモリ量を割り当てる保証はありません。 サーバーの負荷が 最小サーバー メモリで指定されたメモリ量を割り当てる必要がない場合、SQL Server は実行されるメモリが少なくなります。

max_server_memoryを使用して、OS で有害なメモリ不足が発生しないことを保証します。 最大サーバー メモリ構成を設定するには、メモリ要件を決定するために、SQL Server プロセスの全体的な消費量を監視します。 1 つのインスタンスに対してこれらの計算をより正確に行うためには、次の手順を実行します。

  • OS メモリの合計から、OS 自体に 1 GB から 4 GB を予約します。
  • 次に、スタック サイズ 1 * 計算された最大ワーカー スレッド 2 + -g スタートアップ パラメーター 3 (-g が設定されていない場合は既定では 256 MB) で構成される、最大サーバー メモリ 制御の外部で発生する可能性のある SQL Server メモリ割り当てと同等のメモリ割り当てを減算します。 残っているのは、単一インスタンスセットアップのmax_server_memory設定です。

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

2 現在のホスト内の特定の数のアフィニティ化された CPU に対して計算される既定のワーカー スレッドについては、 max worker threads サーバー構成オプションを構成する方法に関するドキュメント ページを参照してください。

3-g スタートアップ パラメーターの詳細については、データベース エンジン サービスのスタートアップ オプションに関するドキュメント ページを参照してください。 32 ビット SQL Server (SQL Server 2005 から SQL Server 2014) にのみ使用できます。

OS の種類 最大サーバー メモリに対して許容される最小メモリ量
32 ビット 64 MB
64 ビット 128 MB

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

2 つのサーバー メモリ オプション (最小サーバー メモリ最大サーバー メモリ) を使用して、SQL Server のインスタンスの SQL Server メモリ マネージャーによって管理されるメモリの量 (メガバイト単位) を再構成します。 既定では、SQL Server は使用可能なシステム リソースに基づいてメモリ要件を動的に変更できます。

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

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

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

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

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

    SQL Server が使用可能なシステム リソースに基づいてメモリ要件を動的に変更できるようにするには、既定の設定を使用します。 最小サーバー メモリの既定の設定は 0 で、最大サーバー メモリの既定の設定は 2147483647 メガバイト (MB) です。

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

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

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

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

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

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

メモリ内のページをロックする

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

SQL Server の [ メモリ内のページのロック ] オプションを無効にするには、SQL Server スタートアップ アカウントの "メモリ内のロックされたページ" ユーザー権限を削除します。

メモリ内のページのロックを無効にするには

メモリ内のロック ページ オプションを無効にするには:

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

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

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

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

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

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

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

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

仮想メモリ管理者

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

アドレス空間のコミットされた領域は、Windows Virtual Memory Manager (VMM) によって使用可能な物理メモリにマップされます。

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

仮想メモリ システムを使用すると、物理メモリのオーバー コミットメントが可能になるため、仮想メモリと物理メモリの比率は 1:1 を超える可能性があります。 その結果、大規模なプログラムは、さまざまな物理メモリ構成を持つコンピューターで実行できます。 ただし、すべてのプロセスの平均ワーキング セットの合計よりも大幅に多くの仮想メモリを使用すると、パフォーマンスが低下する可能性があります。

最小サーバー メモリ最大サーバー メモリ オプションは、詳細オプションです。 sp_configure システム ストアド プロシージャを使用してこれらの設定を変更する場合は、詳細オプションの表示が 1 に設定されている場合にのみ変更できます。 これらの設定は、サーバーの再起動なしですぐに有効になります。

SQL Server の複数のインスタンスの実行

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

  • 最大サーバー メモリを使用してメモリ使用量を制御します。 各インスタンスの最大設定を確立します。許容量の合計がマシン上の物理メモリの合計を超えないよう注意してください。 各インスタンスに、予想されるワークロードまたはデータベース サイズに比例したメモリを割り当てる必要がある場合があります。 この方法には、新しいプロセスまたはインスタンスが起動すると、空きメモリがすぐに使用できるという利点があります。 欠点は、すべてのインスタンスを実行していない場合、実行中のどのインスタンスも残りの空きメモリを利用できないことです。

  • 最小サーバー メモリを使用してメモリ使用量を制御します。 これらの最小値の合計がマシン上の物理メモリの合計より 1 から 2 GB 小さいように、各インスタンスの最小設定を確立します。 ここでも、これらの最小値は、そのインスタンスの予想される負荷に比例して確立できます。 この方法には、すべてのインスタンスが同時に実行されていない場合、実行中のインスタンスが残りの空きメモリを使用できるという利点があります。 この方法は、SQL Server が少なくとも妥当な量のメモリを取得することを保証するため、コンピューター上にメモリを集中的に消費する別のプロセスがある場合にも役立ちます。 欠点は、新しいインスタンス (またはその他のプロセス) が開始されると、特に変更されたページをデータベースに書き戻す必要がある場合に、実行中のインスタンスがメモリを解放するまでに時間がかかる可能性があるということです。

  • 何もしない (推奨されません)。 ワークロードに表示される最初のインスタンスは、すべてのメモリを割り当てる傾向があります。 アイドル状態のインスタンスまたは後で開始されたインスタンスは、使用可能なメモリ量が最小限に抑えられます。 SQL Server では、インスタンス間でメモリ使用量のバランスを取ろうとしません。 ただし、すべてのインスタンスは Windows メモリ通知シグナルに応答して、メモリ占有領域のサイズを調整します。 Windows では、メモリ通知 API を使用してアプリケーション間でメモリのバランスを取りません。 システム上のメモリの可用性に関するグローバルなフィードバックを提供するだけです。

インスタンスを再起動せずにこれらの設定を変更できるため、使用パターンに最適な設定を簡単に試すことができます。

SQL Server への最大メモリ量の提供

32 ビット 64 ビット
従来のメモリ すべての SQL Server エディションで仮想アドレス空間の制限を処理するまで:

2 GB

3 GB と /3 gb ブート パラメーター*

WOW64 で 4 GB**
すべての SQL Server エディションで仮想アドレス空間の制限を処理するまで:

x64 アーキテクチャでは 8 TB

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

**WOW64 (Windows 64 上の Windows) は、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)
サーバー構成オプション (SQL Server)
sp_configure (Transact-SQL)