適用対象:SQL Server
Azure SQL Managed Instance
max RPC request params (KB)
サーバー構成オプションは、1 回のバッチ RPC 呼び出しに対してリモート プロシージャ コール (RPC) パラメーターで使用されるメモリの量を制限します。 バッチ RPC 呼び出しには、1 つのバッチとしてサーバーに送信される 1 つ以上のステートメントと、それに関連付けられたパラメーターのセットが含まれます。
既定では、バッチ RPC 呼び出しのパラメーターに使用されるサーバー メモリは無制限です。 RPC パラメーターによって消費されるメモリの合計が過度に大きい場合、メモリ不足のため、現在のサーバー プロセスが終了する可能性があります。
max RPC request params (KB)
構成が 0 以外の値に設定されている場合、1 回のバッチ RPC 呼び出しで使用されるメモリは、指定した値に制限されます。 RPC 呼び出しがメモリ制限を超えた場合、エラー 701、重大度 17、状態 21、メッセージで終了します。 There is insufficient system memory in resource pool 'resource-pool-name' to run this query.
RPC 呼び出しを終了すると、RPC パラメーターによって消費されたメモリが解放され、サーバー プロセスが終了するリスクが回避されます。 詳細については、「MSSQLSERVER_701」 を参照してください。
可用性
この構成オプションは、次の SQL プラットフォームとバージョンで使用できます。
- SQL Server 2019 (15.x) CU 26 以降のバージョン
- SQL Server 2022 (16.x) CU 13 以降のバージョン
- SQL Server 2025 (17.x) プレビュー
- Azure SQL マネージド インスタンス
注釈
SYS.DM_OS_MEMORY_CLERKSを使用して、メモリ クラーク型としてUSERSTORE_SXC
を使用し、メモリ オブジェクトの種類としてを使用して、MEMOBJ_PROCESSRPC
を使用して、RPC パラメーターによるサーバー メモリ消費量の合計を監視できます。
USERSTORE_SXC
メモリ クラークまたはMEMOBJ_PROCESSRPC
メモリ オブジェクトが大量のメモリを消費している場合は、次の軽減策を検討してください。
-
max RPC request params (KB)
サーバー構成を変更して、1 つのバッチ RPC 呼び出しで消費されるメモリの量を制限します。 最適な値は、RPC 呼び出しで使用されるパラメーター データのサイズと、同時に実行される RPC 呼び出しの数によって異なります。 最初に大きな値を設定してから、RPC 呼び出しの実行中にメモリ消費量とメモリ不足エラー (エラー 701、状態 21) の発生を監視しながら値の削減を開始します。 目標は、メモリ不足エラーの発生を最小限に抑えながら、メモリ消費量を制御し続けることです。 - 大規模な RPC 呼び出しをより小さなバッチに分割します。 たとえば、1 回の RPC 呼び出しで 100,000
INSERT
ステートメントを使用する代わりに、各呼び出しで 10,000 個のステートメントを含む 10 個の RPC 呼び出しを発行します。 - RPC 呼び出しを使用してデータを一括挿入しないでください。 代わりに、.NET の SqlClient の SqlBulkCopy や Java の SQLServerBulkCopy for JDBC など、クライアント ドライバーの一括コピー メソッドを使用します。 詳細については、「 データの一括インポートと一括エクスポート (SQL Server)」を参照してください。
例示
A。 RPC 呼び出しパラメーターの最大メモリを設定する
次の例では、1 回の RPC 呼び出しで使用できる最大 RPC パラメーター メモリを 1 MB に設定します。
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXECUTE sp_configure 'max RPC request params (KB)', 1024;
RECONFIGURE;
GO
B. 現在の合計および最大 RPC パラメーター メモリを監視する
次の例では、RPC パラメーターによって消費されている現在の合計と最大メモリを監視します。
SELECT SUM(pages_kb) / 1024. AS userstore_sxc_memory_mb
FROM sys.dm_os_memory_clerks
WHERE type = 'USERSTORE_SXC';
SELECT SUM(pages_in_bytes) / 1024. / 1024 AS total_processrpc_memory_mb,
MAX(max_pages_in_bytes) / 1024. / 1024 AS max_processrpc_memory_mb
FROM sys.dm_os_memory_objects
WHERE type = 'MEMOBJ_PROCESSRPC';