次の方法で共有


サーバー構成: 最大 RPC 要求パラメーター (KB)

適用対象:SQL ServerAzure 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';