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

このトピックに適用されますはいSQL ServerありませんAzure SQL DatabaseありませんAzure SQL Data Warehouseありません。並列データ ウェアハウスTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

min server memory および max server memoryの 2 つのサーバー メモリ オプションを使用して、 SQL ServerSQL Serverのインスタンスで使用される SQL Server プロセス用に SQL Server Memory Manager によって管理されるメモリ量を MB 単位で再構成します。Use the two server memory options, min server memory and max server memory, to reconfigure the amount of memory (in megabytes) that is managed by the SQL Server Memory Manager for a SQL Server process used by an instance of SQL ServerSQL Server.

min server memory の既定の設定は 0 MB で、max server memory の既定の設定は 2,147,483,647 MB です。The default setting for min server memory is 0, and the default setting for max server memory is 2,147,483,647 megabytes (MB). 既定では、 SQL ServerSQL Server は使用可能なシステム リソースに基づいて、必要なメモリを動的に変更できます。By default, SQL ServerSQL Server can change its memory requirements dynamically based on available system resources. 詳細については、「動的メモリ管理」を参照してください。For more information, see dynamic memory management.

max server memory に設定できる最小メモリは 128 MB です。The minimum memory amount allowable for max server memory is 128 MB.

重要

max server memory 値の設定が高すぎると、 SQL ServerSQL Server の単一インスタンスと、同じホストの他の SQL ServerSQL Server インスタンスでメモリの競合が発生することがあります。Setting max server memory value too high can cause a single instance of SQL ServerSQL Server might have to compete for memory with other SQL ServerSQL Server instances hosted on the same host. ただし、この値の設定が低すぎても、メモリやパフォーマンス関連の大きな問題が発生する可能性があります。However, setting this value too low could cause significant memory pressure and performance problems. max server memory を最小値に設定すると、 SQL ServerSQL Server が起動できなくなることもあります。Setting max server memory to the minimum value can even prevent SQL ServerSQL Server from starting. このオプションの変更後に SQL ServerSQL Server を起動できなくなった場合は、 –f 起動オプションを使用して起動し、 max server memory を元の値に戻します。If you cannot start SQL ServerSQL Server after changing this option, start it using the –f startup option and reset max server memory to its previous value. 詳細については、「 データベース エンジン サービスのスタートアップ オプション」を参照してください。For more information, see Database Engine Service Startup Options.

SQL ServerSQL Server はメモリを動的に使用できますが、手動でメモリ オプションを設定して SQL ServerSQL Server がアクセスできるメモリの量を制限こともできます。 can use memory dynamically; however, you can set the memory options manually and restrict the amount of memory that SQL ServerSQL Server can access. この場合は、 SQL ServerSQL Server 用のメモリ量を設定する前に、OS に必要なメモリ、max_server_memory で制御されないメモリ割り当てに必要なメモリ、 SQL ServerSQL Server の他のインスタンス (およびコンピューターが SQL ServerSQL Server 専用でない場合は他のシステム) に必要なメモリの量を物理メモリ全体から差し引いて適切なメモリ設定を決定します。Before you set the amount of memory for SQL ServerSQL Server, determine the appropriate memory setting by subtracting, from the total physical memory, the memory required for the OS, memory allocations not controlled by the max_server_memory setting, and any other instances of SQL ServerSQL Server (and other system uses, if the computer is not wholly dedicated to SQL ServerSQL Server). この差が、現在の SQL ServerSQL Server インスタンスに割り当てることができる最大メモリ量です。This difference is the maximum amount of memory you can assign to the current SQL ServerSQL Server instance.

メモリ オプションの手動設定Setting the memory options manually

サーバー オプションの min server memorymax server memory を設定して、メモリ範囲を与えることができます。The server options min server memory and max server memory can be set to span a range of memory values. この方法は、システム管理者またはデータベース管理者が同じホスト上で実行する他のアプリケーションまたは SQL ServerSQL Server の他のインスタンスに必要なメモリと合わせて SQL ServerSQL Server のインスタンスを構成する場合に便利です。This method is useful for system or database administrators to configure an instance of SQL ServerSQL Server in conjunction with the memory requirements of other applications, or other instances of SQL ServerSQL Server that run on the same host.

注意

min server memory および max server memory は拡張オプションです。The min server memory and max server memory options are advanced options. sp_configure システム ストアド プロシージャを使用してこれらの設定を変更するには、 show advanced options を 1 に設定する必要があります。If you are using the sp_configure system stored procedure to change these settings, you can change them only when show advanced options is set to 1. これらの設定は、サーバーを再起動しなくてもすぐに有効になります。These settings take effect immediately without a server restart.

min_server_memory を使用すると、 SQL ServerSQL Server インスタンス用に SQL ServerSQL Server Memory Manager で使用できる最小メモリ量を確保できます。Use min_server_memory to guarantee a minimum amount of memory available to the SQL ServerSQL Server Memory Manager for an instance of SQL ServerSQL Server. SQL ServerSQL Server は、 min server memory で指定されたメモリ量を起動時にすぐに割り当てるわけではありません。 will not immediately allocate the amount of memory specified in min server memory on startup. ただし、クライアントの負荷によってメモリの使用量がこの値に達すると、 SQL ServerSQL Server min server memory の値を小さくしない限り、 はメモリを解放できません。However, after memory usage has reached this value due to client load, SQL ServerSQL Server cannot free memory unless the value of min server memory is reduced. たとえば、 SQL ServerSQL Server の複数のインスタンスが同じホストに同時に存在するとき、インスタンスのメモリを予約する目的で、max_server_memory の代わりに min_server_memory パラメーターを設定します。For example, when several instances of SQL ServerSQL Server can exist concurrently in the same host, set the min_server_memory parameter instead of max_server_memory for the purpose of reserving memory for an instance. また、基礎をなすホストからのメモリ負荷が高いために、ゲスト SQL ServerSQL Server 仮想マシン (VM) のバッファー プールから十分なパフォーマンスに必要な量を超えるメモリが割り当て解除される事態を回避するために、min_server_memory 値の設定は仮想環境で必要不可欠となります。Also, setting a min_server_memory value is essential in a virtualized environment to ensure memory pressure from the underlying host does not attempt to deallocate memory from the buffer pool on a guest SQL ServerSQL Server virtual machine (VM) beyond what is needed for acceptable performance.

注意

SQL ServerSQL Server は、min server memory で指定されたメモリ量を必ず割り当てるわけではありません。 is not guaranteed to allocate the amount of memory specified in min server memory. サーバーの負荷が min server memoryで指定されたメモリ量の割り当てを必要としない場合、 SQL ServerSQL Server はより少ないメモリで実行します。If the load on the server never requires allocating the amount of memory specified in min server memory, SQL ServerSQL Server will run with less memory.

max_server_memory を利用し、OS に好ましくないメモリ負荷が発生しないようにします。Use max_server_memory to guarantee the OS does not experience detrimental memory pressure. 最大サーバー メモリ構成を設定するには、メモリ要件を判断する目的で、 SQL ServerSQL Server の全体的使用量を観察します。To set max server memory configuration, monitor overall consumption of the SQL ServerSQL Server process in order to determine memory requirements. 単一インスタンスでこのような計算をより精確に行うには:To be more accurate with these calculations for a single instance:

  • OS のメモリ合計から、1GB ~ 4GB を OS 自体に予約します。From the total OS memory, reserve 1GB-4GB to the OS itself.
  • 次に、max server memory で制御されない、潜在的 SQL ServerSQL Server メモリ割り当てに相当するメモリ量を差し引きます。この相当するメモリ量は、スタック サイズ1 に計算した最大ワーカー スレッド2 を掛けたものにスタートアップ パラメーター3 の -g を足して求められます (-g が設定されていない場合、既定で 256MB を足します)。Then subtract the equivalent of potential SQL ServerSQL Server memory allocations outside the max server memory control, which is comprised of stack size 1 \ calculated max worker threads 2 + -g startup parameter 3* (or 256MB by default if -g is not set). 残ったものが単一インスタンス セットアップの max_server_memory 設定になります。What remains should be the max_server_memory setting for a single instance setup.

1 アーキテクチャあたりのスレッド スタック サイズについては、「メモリ管理アーキテクチャ ガイド」を参照してください。1 Refer to the Memory Management Architecture guide for information on thread stack sizes per architecture.

2 現在のホストで関連付けられている所与の CPU 数に対して計算される既定のワーカー スレッドについては、ドキュメント ページの「max worker threads サーバー構成オプションの構成」を参照してください。2 Refer to the documentation page on how to Configure the max worker threads Server Configuration Option, for information on the calculated default worker threads for a given number of affinitized CPUs in the current host.

3 スタートアップ パラメーター -g の詳細については、ドキュメント ページの「データベース エンジン サービスのスタートアップ オプション」を参照してください。3 Refer to the documentation page on Database Engine Service Startup Options for information on the -g startup parameter.

SQL Server Management StudioSQL Server Management Studio を利用してメモリ オプションを構成する方法How to configure memory options using SQL Server Management StudioSQL Server Management Studio

min server memory および max server memoryの 2 つのサーバー メモリ オプションを使用して、 SQL ServerSQL Server のインスタンス用に SQL ServerSQL Server Memory Manager によって管理されるメモリ量を MB 単位で再構成します。Use the two server memory options, min server memory and max server memory, to reconfigure the amount of memory (in megabytes) managed by the SQL ServerSQL Server Memory Manager for an instance of SQL ServerSQL Server. 既定では、 SQL ServerSQL Server は使用可能なシステム リソースに基づいて、必要なメモリを動的に変更できます。By default, SQL ServerSQL Server can change its memory requirements dynamically based on available system resources.

固定量のメモリを設定するには:To set a fixed amount of memory:

  1. オブジェクト エクスプローラーで、サーバーを右クリックし、 [プロパティ]をクリックします。In Object Explorer, right-click a server and select Properties.

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

  3. [サーバー メモリ オプション] で、[最小サーバー メモリ][最大サーバー メモリ] と同じ量を入力します。Under Server Memory Options, enter the same amount that you want for Minimum server memory and Maximum server memory.

    既定の設定を使用すると、 SQL ServerSQL Server が使用できるシステム リソースに基づいて、そのメモリ要求を動的に変更できるようになります。Use the default settings to allow SQL ServerSQL Server to change its memory requirements dynamically based on available system resources. max server memory上記のように設定することが推奨されます。It is recommended to set a max server memory as detailed above.

Lock Pages in Memory (LPIM)Lock Pages in Memory (LPIM)

この Windows ポリシーにより、プロセスを使用して物理メモリにデータを保持できるアカウントを指定し、ディスク上の仮想メモリへのデータのページングを防止します。This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk. メモリ内のページをロックすると、ディスクへのメモリのページングが発生した際に、サーバーの応答性を維持できます。Locking pages in memory may keep the server responsive when paging memory to disk occurs. SQL ServerSQL Server Standard エディション以上のインスタンスでは、sqlservr.exe の実行権限があるアカウントに Windows の Lock Pages in Memory (LPIM) ユーザー権利が付与されている場合、Lock Pages in Memory オプションはオンに設定されます。The Lock Pages in Memory option is set to ON in instances of SQL ServerSQL Server Standard edition and higher when the account with privileges to run sqlservr.exe has been granted the Windows Lock Pages in Memory (LPIM) user right.

SQL ServerSQL ServerLock Pages In Memory オプションを無効にするには、sqlservr.exe ( SQL ServerSQL Server 開始アカウント) 開始アカウントを実行する特権のあるアカウントに関して、Lock Pages in Memory ユーザー権利を削除します。To disable the Lock Pages In Memory option for SQL ServerSQL Server, remove the Lock Pages in Memory user right for the account with privileges to run sqlservr.exe (the SQL ServerSQL Server startup account) startup account.

このオプションを設定しても、 SQL ServerSQL Server 動的メモリ管理には影響が出ません。他のメモリ クラークの要求で拡大縮小できます。Setting this option does not affect SQL ServerSQL Server dynamic memory management, allowing it to expand or shrink at the request of other memory clerks. Lock Pages in Memory ユーザー権利を使用するとき、上記のように max server memory の上限を設定することが推奨されます。When using the Lock Pages in Memory user right it is recommended to set an upper limit for max server memory as detailed above.

重要

このオプションの設定は、必要なときにのみ、具体的には、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: ##%. SQL Server 2012SQL Server 2012 以降、Standard Edition の場合、トレース フラグ 845 はロックされたページの使用で不要になりました。Setting this option should only be used when necessary, namely if there are signs that sqlservr process is being paged out. In this case, error 17890 will be reported in the Errorlog, resembling the below example: 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: ##%. Starting with SQL Server 2012SQL Server 2012, trace flag 845 is not needed for Standard Edition to use Locked Pages.

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

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

  1. [スタート] メニューの [ファイル名を指定して実行]をクリックします。On the Start menu, click Run. [開く] ボックスに「 gpedit.msc」と入力します。In the Open box, type gpedit.msc.

    [グループ ポリシー] ダイアログ ボックスが開きます。The Group Policy dialog box opens.

  2. [グループ ポリシー] コンソールで [コンピューターの構成]を展開し、次に [Windows の設定]を展開します。On the Group Policy console, expand Computer Configuration, and then expand Windows Settings.

  3. [セキュリティの設定]を展開し、 [ローカル ポリシー]を展開します。Expand Security Settings, and then expand Local Policies.

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

    ポリシーが詳細ペインに表示されます。The policies will be displayed in the details pane.

  5. 詳細ペインで、 [メモリ内のページのロック]をダブルクリックします。In the pane, double-click Lock pages in memory.

  6. [ローカル セキュリティ ポリシーの設定] ダイアログ ボックスで、sqlservr.exe の実行権限のあるアカウント ( SQL ServerSQL Server 開始アカウント) を追加します。In the Local Security Policy Setting dialog box, add the account with privileges to run sqlservr.exe (the SQL ServerSQL Server startup account).

複数の SQL ServerSQL Server インスタンスの実行Running multiple instances of SQL ServerSQL Server

データベース エンジンDatabase Engineの複数のインスタンスを実行する場合は、3 つの方法でメモリを管理できます。When you are running multiple instances of the データベース エンジンDatabase Engine, there are three approaches you can use to manage memory:

  • max server memory を使用し、上記のようにメモリ使用量を制御します。Use max server memory to control memory usage, as detailed above. 許可する値の合計がコンピューターの合計物理メモリを超えないように注意して、各インスタンスの最大値を設定します。Establish maximum settings for each instance, being careful that the total allowance is not more than the total physical memory on your machine. 予測されるワークロードまたはデータベース サイズに比例して、各インスタンスにメモリを割り当てることができます。You might want to give each instance memory proportional to its expected workload or database size. この方法の利点は、新しいプロセスまたはインスタンスが起動したときに、直ちに空きメモリを使用できることです。This approach has the advantage that when new processes or instances start up, free memory will be available to them immediately. 欠点は、実行していないインスタンスがある場合、残っている空きメモリを実行中のインスタンスが利用できないことです。The drawback is that if you are not running all of the instances, none of the running instances will be able to utilize the remaining free memory.

  • min server memory を使用し、上記のようにメモリ使用量を制御します。Use min server memory to control memory usage, as detailed above. 最小値の合計がコンピューターの合計物理メモリよりも 1 ~ 2 GB 少なくなるように、各インスタンスの最小値を設定します。Establish minimum settings for each instance, so that the sum of these minimums is 1-2 GB less than the total physical memory on your machine. この場合も、インスタンスの予測される負荷に比例して、最小値を設定できます。Again, you may establish these minimums proportionately to the expected load of that instance. この方法の利点は、一度にすべてのインスタンスを実行しない場合に、実行中のインスタンスが残っている空きメモリを使用できることです。This approach has the advantage that if not all instances are running at the same time, the ones that are running can use the remaining free memory. また、この方法は、コンピューターの別のプロセスがメモリを集中的に使用する場合にも有効です。少なくとも、妥当なメモリ量を SQL ServerSQL Server が使用できることが保証されます。This approach is also useful when there is another memory-intensive process on the computer, since it would insure that SQL ServerSQL Server would at least get a reasonable amount of memory. 欠点は、新しいインスタンス (または他のプロセス) が起動するときに、実行中のインスタンスがメモリを解放するのにしばらく時間がかかる場合があることです。特に、変更されたページをデータベースに書き戻す必要がある場合は時間がかかります。The drawback is that when a new instance (or any other process) starts, it may take some time for the running instances to release memory, especially if they must write modified pages back to their databases to do so.

  • 何も行いません (非推奨)。Do nothing (not recommended). ワークロードを伴う最初のインスタンスに、すべてのメモリが割り当てられる傾向があります。The first instances presented with a workload will tend to allocate all of memory. アイドル状態のインスタンスまたは後から起動したインスタンスは、使用可能な最小限のメモリ量だけで実行することになります。Idle instances, or instances started later, may end up running with only a minimal amount of memory available. SQL ServerSQL Server は、インスタンス間でメモリ使用量の調整を図ることはありません。 makes no attempt to balance memory usage across instances. ただし、すべてのインスタンスは、Windows の Memory Notification シグナルに対応して、メモリ使用量を調整します。All instances will, however, respond to Windows Memory Notification signals to adjust the size of their memory footprint. Memory Notification API を使用して Windows がアプリケーション間のメモリを調整することはありません。Windows does not balance memory across applications with the Memory Notification API. システムで使用できるメモリに関するグローバルなフィードバックを提供するだけです。It merely provides global feedback as to the availability of memory on the system.

    これらの設定はインスタンスを再起動しなくても変更できるので、簡単にいろいろな設定を試して、使用パターンに最適な設定を見つけることができます。You can change these settings without restarting the instances, so you can easily experiment to find the best settings for your usage pattern.

SQL Server に対する最大メモリ容量の指定Providing the maximum amount of memory to SQL Server

SQL ServerSQL Server のすべてのエディションで、プロセス仮想アドレス空間の制限までメモリを構成できます。Memory can be configured up to the process virtual address space limit in all SQL ServerSQL Server editions. 詳細については、「Memory Limits for Windows and Windows Server Releases」 (Windows リリースと Windows Server リリースのメモリ上限) を参照してください。For more information, see Memory Limits for Windows and Windows Server Releases.

使用例Examples

例 AExample A

次の例では、 max server memory オプションを 4 GB に設定します。The following example sets the max server memory option to 4 GB:

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

例 B: 現在のメモリ割り当てを確認するExample B. Determining Current Memory Allocation

次のクエリでは、現在割り当てられているメモリに関する情報を返します。The following query returns information about currently allocated memory.

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;  

参照See Also

メモリ管理アーキテクチャ ガイド Memory Management Architecture Guide
パフォーマンスの監視とチューニング Monitor and Tune for Performance
RECONFIGURE (Transact-SQL) RECONFIGURE (Transact-SQL)
サーバー構成オプション (SQL Server) Server Configuration Options (SQL Server)
sp_configure (Transact-SQL) sp_configure (Transact-SQL)
データベース エンジン サービスのスタートアップ オプション Database Engine Service Startup Options
エディションと SQL Server 2016 のサポートされる機能 Editions and supported features of SQL Server 2016
エディションと SQL Server 2017 のサポートされる機能 Editions and supported features of SQL Server 2017
Linux 上の SQL Server 2017 のエディションとサポートされる機能 Editions and supported features of SQL Server 2017 on Linux
Windows リリースと Windows Server リリースのメモリ上限Memory Limits for Windows and Windows Server Releases