Compartir a través de


Configuración del servidor: máx parámetros de solicitud RPC (KB)

Se aplica a:SQL ServerAzure SQL Managed Instance

La max RPC request params (KB) opción de configuración del servidor limita la cantidad de memoria usada por los parámetros de llamada a procedimiento remoto (RPC) para una sola llamada RPC por lotes. Una llamada RPC por lotes contiene una o varias instrucciones que se envían al servidor como un único lote con su conjunto de parámetros asociado.

De forma predeterminada, la memoria del servidor que se usa para los parámetros de las llamadas RPC por lotes es ilimitada. Cuando la memoria total consumida por los parámetros RPC es excesivamente grande, el proceso del servidor actual podría terminarse debido a una memoria insuficiente.

Cuando la max RPC request params (KB) configuración se establece en un valor distinto de cero, la memoria usada por una sola llamada RPC por lotes se limita al valor especificado. Si la llamada RPC supera el límite de memoria, se termina con el error 701, gravedad 17, estado 21, mensaje: There is insufficient system memory in resource pool 'resource-pool-name' to run this query. Finalizar la llamada RPC libera la memoria consumida por los parámetros RPC y evita el riesgo de terminación del proceso del servidor. Para obtener más información, consulte MSSQLSERVER_701.

Disponibilidad

Esta opción de configuración está disponible en las siguientes plataformas y versiones de SQL:

  • SQL Server 2019 (15.x) CU 26 y versiones posteriores
  • SQL Server 2022 (16.x) CU 13 y versiones posteriores
  • VERSIÓN PRELIMINAR de SQL Server 2025 (17.x)
  • Instancia Gestionada de Azure SQL

Observaciones

Puede supervisar el consumo total de memoria del servidor mediante parámetros RPC mediante sys.dm_os_memory_clerks, con USERSTORE_SXC como tipo de distribuidor de memoria y mediante sys.dm_os_memory_objects, con MEMOBJ_PROCESSRPC como tipo de objeto de memoria.

Si observa que el USERSTORE_SXC administrador de memoria o los MEMOBJ_PROCESSRPC objetos de memoria consumen cantidades desproporcionadamente grandes de memoria, considere las siguientes mitigaciones:

  • Modifique la configuración del max RPC request params (KB) servidor para limitar la cantidad de memoria consumida por una sola llamada RPC por lotes. El valor óptimo depende del tamaño de los datos de parámetro utilizados en las llamadas RPC y del número de llamadas RPC que se ejecutan simultáneamente. Establezca inicialmente un valor mayor y empiece a reducir el valor mientras supervisa el consumo de memoria y la aparición de errores de memoria insuficiente (error 701, estado 21) mientras se ejecutan las llamadas RPC. El objetivo es mantener el consumo de memoria bajo control a la vez que se minimiza la aparición de errores de memoria insuficiente.
  • Dividir llamadas RPC grandes en lotes más pequeños. Por ejemplo, en lugar de usar 100 000 INSERT instrucciones en una sola llamada RPC, emita 10 llamadas RPC con 10 000 instrucciones en cada llamada.
  • Evite usar llamadas RPC para insertar datos de forma masiva. En su lugar, use los métodos de copia masiva del controlador cliente, como SqlBulkCopy para SqlClient en .NET o SQLServerBulkCopy para JDBC en Java. Para obtener más información, vea Importación y exportación masiva de datos (SQL Server).

Ejemplos

Un. Establecimiento de la memoria máxima de parámetros de llamada RPC

En el ejemplo siguiente se establece la memoria máxima del parámetro RPC que una sola llamada RPC puede consumir en 1 MB.

EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
GO

EXECUTE sp_configure 'max RPC request params (KB)', 1024;
RECONFIGURE;
GO

B. Supervisar la memoria actual total y máxima de parámetros RPC

En los ejemplos siguientes se supervisa el total actual y la memoria máxima consumida por los parámetros 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';