Dela via


Serverkonfiguration: maximala RPC-begärandeparamer (KB)

gäller för:SQL ServerAzure SQL Managed Instance

Serverkonfigurationsalternativet max RPC request params (KB) begränsar mängden minne som används av RPC-parametrarna (remote procedure call) för ett enda batchindelade RPC-anrop. Ett batchindelade RPC-anrop innehåller en eller flera instruktioner som skickas till servern som en enda batch med dess associerade uppsättning parametrar.

Som standard är serverminnet som används för parametrarna för batchbaserade RPC-anrop obegränsat. När det totala minne som förbrukas av RPC-parametrar är för stort kan den aktuella serverprocessen avslutas på grund av otillräckligt minne.

När konfigurationen max RPC request params (KB) är inställd på ett värde som inte är noll begränsas det minne som används av ett enda batchangivet RPC-anrop till det angivna värdet. Om RPC-anropet överskrider minnesgränsen avslutas det med fel 701, allvarlighetsgrad 17, tillstånd 21, meddelande: There is insufficient system memory in resource pool 'resource-pool-name' to run this query. Om RPC-anropet avslutas frigörs det minne som förbrukas av RPC-parametrarna och risken för att serverprocessen avslutas. Mer information finns i MSSQLSERVER_701.

Tillgänglighet

Det här konfigurationsalternativet är tillgängligt på följande SQL-plattformar och -versioner:

  • SQL Server 2019 (15.x) CU 26 och senare versioner
  • SQL Server 2022 (16.x) CU 13 och senare versioner
  • Förhandsversion av SQL Server 2025 (17.x)
  • Hanterad instans i Azure SQL

Anmärkningar

Du kan övervaka den totala serverminnesförbrukningen med RPC-parametrar med hjälp av sys.dm_os_memory_clerks, med USERSTORE_SXC som typ av minnesbiträde och med hjälp av sys.dm_os_memory_objects, med MEMOBJ_PROCESSRPC som minnesobjekttyp.

Om du observerar att minnestjänstemannen USERSTORE_SXC eller minnesobjekten MEMOBJ_PROCESSRPC förbrukar oproportionerligt stora mängder minne bör du överväga följande åtgärder:

  • max RPC request params (KB) Ändra serverkonfigurationen för att begränsa mängden minne som förbrukas av ett enda batch-RPC-anrop. Det optimala värdet beror på storleken på de parameterdata som används i RPC-anrop och antalet RPC-anrop som körs samtidigt. Ange ett större värde först och börja sedan minska värdet medan du övervakar minnesförbrukningen och förekomsten av fel som inte finns i minnet (fel 701, tillstånd 21) medan RPC-anrop körs. Målet är att hålla minnesförbrukningen under kontroll samtidigt som förekomsten av out-of-memory-fel minimeras.
  • Dela upp stora RPC-anrop i mindre batchar. I stället för att till exempel använda 100 000 INSERT instruktioner i ett enda RPC-anrop utfärdar du 10 RPC-anrop med 10 000 instruktioner i varje anrop.
  • Undvik att använda RPC-anrop för att infoga data i bulk. Använd i stället masskopieringsmetoderna för klientdrivrutinen, till exempel SqlBulkCopy för SqlClient i .NET eller SQLServerBulkCopy för JDBC i Java. Mer information finns i Massimport och export av data (SQL Server).

Exempel

A. Ange det maximala RPC-anropsparameterminnet

I följande exempel anges det maximala RPC-parameterminnet som ett enda RPC-anrop kan använda till 1 MB.

EXECUTE sp_configure 'show advanced options', 1;

RECONFIGURE;
GO

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

RECONFIGURE;
GO

B. Övervaka aktuell summa och maximalt RPC-parameterminne

I följande exempel övervakas den aktuella summan och det maximala minne som förbrukas av RPC-parametrar:

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';