Delen via


Serverconfiguratie: maximum aantal RPC-aanvraagparameters (KB)

Van toepassing op:SQL ServerAzure SQL Managed Instance

De max RPC request params (KB) serverconfiguratieoptie beperkt de hoeveelheid geheugen die wordt gebruikt door de RPC-parameters (remote procedure call) voor één RPC-aanroep in batch. Een RPC-aanroep in batch bevat een of meer instructies die als één batch worden verzonden naar de server met de bijbehorende set parameters.

Standaard is het servergeheugen dat wordt gebruikt voor de parameters van batchgewijze RPC-aanroepen onbeperkt. Wanneer het totale geheugen dat wordt verbruikt door RPC-parameters te groot is, kan het huidige serverproces worden beëindigd vanwege onvoldoende geheugen.

Wanneer de max RPC request params (KB) configuratie is ingesteld op een niet-nulwaarde, is het geheugen dat wordt gebruikt door één RPC-aanroep in batch beperkt tot de opgegeven waarde. Als de RPC-aanroep de geheugenlimiet overschrijdt, wordt deze beëindigd met fout 701, ernst 17, status 21, bericht: There is insufficient system memory in resource pool 'resource-pool-name' to run this query. Als de RPC-aanroep wordt beëindigd, wordt het geheugen dat wordt verbruikt door de RPC-parameters vrijgegeven en wordt het risico van beëindiging van het serverproces vermeden. Zie MSSQLSERVER_701 voor meer informatie.

Beschikbaarheid

Deze configuratieoptie is beschikbaar in de volgende SQL-platformen en -versies:

  • SQL Server 2019 (15.x) CU 26 en latere versies
  • SQL Server 2022 (16.x) CU 13 en latere versies
  • SQL Server 2025 (17.x) Preview
  • Azure SQL Managed Instance (een beheerde database-instantie van Azure)

Opmerkingen

U kunt het totale geheugenverbruik van de server bewaken door RPC-parameters met behulp van sys.dm_os_memory_clerks, met USERSTORE_SXC als type geheugenbediende en met behulp van sys.dm_os_memory_objects, met MEMOBJ_PROCESSRPC als het type geheugenobject.

Als u merkt dat de USERSTORE_SXC geheugenbediende of de MEMOBJ_PROCESSRPC geheugenobjecten onevenredig grote hoeveelheden geheugen verbruiken, kunt u de volgende oplossingen overwegen:

  • Wijzig de max RPC request params (KB) serverconfiguratie om de hoeveelheid geheugen te beperken die wordt verbruikt door één batch RPC-aanroep. De optimale waarde is afhankelijk van de grootte van de parametergegevens die worden gebruikt in RPC-aanroepen en het aantal RPC-aanroepen dat gelijktijdig wordt uitgevoerd. Stel in eerste instantie een grotere waarde in en begin met het verminderen van de waarde tijdens het bewaken van het geheugenverbruik en het optreden van out-of-memory-fouten (fout 701, status 21) terwijl RPC-aanroepen worden uitgevoerd. Het doel is om het geheugenverbruik onder controle te houden en het aantal out-of-memoryfouten te minimaliseren.
  • Verdeel grote RPC-oproepen in kleinere batches. In plaats van bijvoorbeeld 100.000 INSERT instructies in één RPC-aanroep te gebruiken, geeft u 10 RPC-aanroepen uit met 10.000 instructies in elke aanroep.
  • Vermijd het gebruik van RPC-aanroepen om gegevens bulksgewijs in te voegen. Gebruik in plaats daarvan de methoden voor bulksgewijs kopiëren van het clientstuurprogramma, zoals SqlBulkCopy voor SqlClient in .NET of SQLServerBulkCopy voor JDBC in Java. Zie Bulkimport en Export van gegevens (SQL Server) voor meer informatie.

Voorbeelden

Eén. Het maximumgeheugen van de RPC-aanroepparameter instellen

In het volgende voorbeeld wordt het maximale RPC-parametergeheugen ingesteld dat één RPC-aanroep kan verbruiken tot 1 MB.

EXECUTE sp_configure 'show advanced options', 1;

RECONFIGURE;
GO

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

RECONFIGURE;
GO

B. Huidig totaal en maximaal RPC-parametergeheugen bewaken

De volgende voorbeelden bewaken het huidige totaal en het maximale geheugen dat wordt gebruikt door RPC-parameters:

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