服务器配置选项 max RPC request params (KB)
用于限制单个批处理远程过程调用 (RPC) 中参数所使用的内存量。 批处理 RPC 调用包含一个或多个语句,这些语句作为单个批处理提交到服务器,其中包含其关联的参数集。
默认情况下,用于批处理 RPC 调用参数的服务器内存不受限制。 当 RPC 参数占用的总内存过大时,由于内存不足,当前服务器进程可能会终止。
max RPC request params (KB)
将配置设置为非零值时,单个批处理 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 托管实例
注解
可以通过 RPC 参数使用 sys.dm_os_memory_clerks 结合 USERSTORE_SXC
作为内存管理器类型,以及使用 sys.dm_os_memory_objects 结合 MEMOBJ_PROCESSRPC
作为内存对象类型来监视服务器的总内存消耗。
如果观察到 USERSTORE_SXC
内存职员或 MEMOBJ_PROCESSRPC
内存对象占用了过多内存,请考虑以下措施:
- 修改
max RPC request params (KB)
服务器配置以限制单个批处理 RPC 调用消耗的内存量。 最佳值取决于 RPC 调用中使用的参数数据的大小以及并发执行的 RPC 调用数。 最初设置一个较大的值,然后开始减少这个值。在执行 RPC 调用时,监视内存消耗和是否出现内存不足错误(错误 701,状态 21)。 目标是保持内存消耗处于控制状态,同时最大程度地减少内存不足错误的发生。 - 将大型 RPC 调用拆分为较小的批处理。 例如,与其在单个 RPC 调用中使用 100,000
INSERT
个语句,不如在每次调用中使用 10,000 个语句发出 10 次 RPC 调用。 - 避免使用 RPC 调用批量插入数据。 请改用客户端驱动程序的大容量复制方法,例如 .NET 中的 SqlBulkCopy for SqlClient 或 Java 中的 JDBC 的 SQLServerBulkCopy 。 有关详细信息,请参阅大容量导入和导出数据(SQL Server)。
例子
答: 设置最大 RPC 调用参数内存
以下示例将单个 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';