Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Istanza gestita di Azure SQL
L'opzione max RPC request params (KB)
di configurazione del server limita la quantità di memoria usata dai parametri RPC (Remote Procedure Call) per una singola chiamata RPC in batch. Una chiamata RPC in batch contiene una o più istruzioni inviate al server come singolo batch con il set di parametri associato.
Per impostazione predefinita, la memoria del server usata per i parametri delle chiamate RPC in batch è illimitata. Quando la memoria totale utilizzata dai parametri RPC è eccessivamente grande, il processo del server corrente potrebbe essere terminato a causa di memoria insufficiente.
Quando la max RPC request params (KB)
configurazione è impostata su un valore diverso da zero, la memoria usata da una singola chiamata RPC in batch è limitata al valore specificato. Se la chiamata RPC supera il limite di memoria, viene terminata con errore 701, gravità 17, stato 21, messaggio: There is insufficient system memory in resource pool 'resource-pool-name' to run this query.
terminando la chiamata RPC rilascia la memoria utilizzata dai parametri RPC ed evita il rischio di terminazione del processo del server. Per altre informazioni, vedere MSSQLSERVER_701.
Disponibilità
Questa opzione di configurazione è disponibile nelle piattaforme e nelle versioni SQL seguenti:
- SQL Server 2019 (15.x) CU 26 e versioni successive
- SQL Server 2022 (16.x) CU 13 e versioni successive
- Anteprima di SQL Server 2025 (17.x)
- Istanza SQL gestita di Azure
Osservazioni:
È possibile monitorare il consumo totale di memoria del server tramite i parametri RPC usando sys.dm_os_memory_clerks, con USERSTORE_SXC
come tipo di clerk di memoria e usando sys.dm_os_memory_objects, con MEMOBJ_PROCESSRPC
come tipo di oggetto memoria.
Se si osserva che il USERSTORE_SXC
clerk di memoria o gli MEMOBJ_PROCESSRPC
oggetti memoria utilizzano quantità di memoria sproporzionatamente elevate, considerare le mitigazioni seguenti:
- Modificare la configurazione del
max RPC request params (KB)
server per limitare la quantità di memoria utilizzata da una singola chiamata RPC batch. Il valore ottimale dipende dalle dimensioni dei dati dei parametri usati nelle chiamate RPC e dal numero di chiamate RPC in esecuzione simultaneamente. Impostare inizialmente un valore maggiore, quindi iniziare a ridurre il valore durante il monitoraggio dell'utilizzo della memoria e l'occorrenza di errori di memoria insufficiente (errore 701, stato 21) durante l'esecuzione delle chiamate RPC. L'obiettivo è mantenere sotto controllo il consumo di memoria riducendo al minimo gli errori per memoria insufficiente. - Suddividere le chiamate RPC di grandi dimensioni in batch più piccoli. Ad esempio, anziché usare 100.000
INSERT
istruzioni in una singola chiamata RPC, eseguire 10 chiamate RPC con 10.000 istruzioni in ogni chiamata. - Evitare di usare chiamate RPC per inserire i dati in blocco. Usare invece i metodi di copia bulk del driver client, ad esempio SqlBulkCopy per SqlClient in .NET o SQLServerBulkCopy per JDBC in Java. Per altre informazioni, vedere Importazione ed esportazione bulk di dati (SQL Server).
Esempi
Un. Impostare la memoria massima del parametro di chiamata RPC
Nell'esempio seguente viene impostata la memoria massima del parametro RPC che una singola chiamata RPC può utilizzare su 1 MB.
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXECUTE sp_configure 'max RPC request params (KB)', 1024;
RECONFIGURE;
GO
B. Monitorare la memoria totale attuale e la memoria massima dei parametri RPC
Gli esempi seguenti monitorano il totale corrente e la memoria massima utilizzata dai parametri 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';