Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL Managed Instance
Die max RPC request params (KB) Serverkonfigurationsauswahl begrenzt die Menge des von den Remoteprozeduraufruf-(RPC)-Parametern für einen einzelnen batched RPC-Aufruf verwendeten Arbeitsspeichers. Ein BATCH-RPC-Aufruf enthält eine oder mehrere Anweisungen, die als einzelner Batch mit den zugehörigen Parametern an den Server übermittelt werden.
Standardmäßig ist der Serverspeicher, der für die Parameter von batchierten RPC-Aufrufen verwendet wird, unbegrenzt. Wenn der gesamte von RPC-Parametern verbrauchte Arbeitsspeicher übermäßig groß ist, wird der aktuelle Serverprozess möglicherweise aufgrund unzureichender Arbeitsspeichers beendet.
Wenn die max RPC request params (KB) Konfiguration auf einen Wert ungleich Null festgelegt ist, ist der von einem einzelnen Batch-RPC-Aufruf verwendete Speicher auf den angegebenen Wert beschränkt. Wenn der RPC-Aufruf den Speichergrenzwert überschreitet, wird er mit Fehler 701, Schweregrad 17, Status 21, Meldung beendet: There is insufficient system memory in resource pool 'resource-pool-name' to run this query. Durch das Beenden des RPC-Aufrufs wird der von den RPC-Parametern verbrauchte Speicher freigegeben und das Risiko der Beendigung des Serverprozesses vermieden. Weitere Informationen finden Sie unter MSSQLSERVER_701.
Verfügbarkeit
Diese Konfigurationsoption ist in den folgenden SQL-Plattformen und -Versionen verfügbar:
- SQL Server 2019 (15.x) CU 26 und höhere Versionen
- SQL Server 2022 (16.x) CU 13 und höhere Versionen
- SQL Server 2025 (17.x)
- Verwaltete Azure SQL-Instanz
Bemerkungen
Sie können die Gesamtauslastung des Serverspeichers mithilfe von RPC-Parametern mithilfe von sys.dm_os_memory_clerks überwachen, wobei USERSTORE_SXC sie als Speicherbearbeitertyp verwendet werden und sys.dm_os_memory_objects als MEMOBJ_PROCESSRPC Speicherobjekttyp verwenden.
Wenn Sie feststellen, dass der USERSTORE_SXC Speicherkaufmann oder die MEMOBJ_PROCESSRPC Speicherobjekte unverhältnismäßig große Speichermengen verbrauchen, sollten Sie die folgenden Gegenmaßnahmen berücksichtigen:
- Ändern Sie die
max RPC request params (KB)Serverkonfiguration so, dass der von einem einzelnen Batch-RPC-Aufruf verbrauchte Arbeitsspeicher begrenzt wird. Der optimale Wert hängt von der Größe der Parameterdaten ab, die in RPC-Aufrufen verwendet werden, und der Anzahl der RPC-Aufrufe, die gleichzeitig ausgeführt werden. Zunächst einen größeren Wert festlegen und dann den Wert schrittweise reduzieren, wobei der Speicherverbrauch überwacht und das Auftreten von Out-of-Memory-Fehlern (Fehler 701, Zustand 21) während der Ausführung von RPC-Aufrufen beobachtet wird. Ziel ist es, den Arbeitsspeicherverbrauch unter Kontrolle zu halten und gleichzeitig das Auftreten von Fehlern außerhalb des Arbeitsspeichers zu minimieren. - Teilen Sie große RPC-Aufrufe in kleinere Batches auf. Statt beispielsweise 100.000
INSERTAnweisungen in einem einzelnen RPC-Aufruf zu verwenden, geben Sie 10 RPC-Aufrufe mit 10.000 Anweisungen in jedem Anruf aus. - Vermeiden Sie die Verwendung von RPC-Aufrufen zum Einfügen von Daten in Massen. Verwenden Sie stattdessen die Massenkopiermethoden des Clienttreibers, z. B. SqlBulkCopy für SqlClient in .NET oder SQLServerBulkCopy für JDBC in Java. Weitere Informationen finden Sie unter Massenimport und -export von Daten (SQL Server).
Beispiele
Ein. Festlegen des maximalen Speichers für RPC-Aufrufparameter
Im folgenden Beispiel wird der maximale RPC-Parameterspeicher festgelegt, den ein einzelner RPC-Aufruf auf 1 MB verbrauchen kann.
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXECUTE sp_configure 'max RPC request params (KB)', 1024;
RECONFIGURE;
GO
B. Überwachen des aktuellen Gesamt- und maximalen RPC-Parameterspeichers
Die folgenden Beispiele überwachen die aktuelle Gesamtsumme und den maximalen Speicher, der von RPC-Parametern verbraucht wird:
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';