共用方式為


伺服器組態:最大 RPC 要求參數 (KB)

適用於:SQL ServerAzure SQL 受控執行個體

伺服器 max RPC request params (KB) 組態選項限制了單個批次 RPC 呼叫中 RPC 參數所使用的記憶體數量。 批處理的 RPC 呼叫包含一或多個語句,這些語句會以單一批次的形式提交至伺服器,以及其相關聯的參數集。

根據預設,用於批次 RPC 呼叫參數的伺服器記憶體無限制。 當 RPC 參數耗用的總記憶體過大時,目前的伺服器進程可能會因為記憶體不足而終止。

當組 max RPC request params (KB) 態設定為非零值時, 一批次 RPC 呼叫所使用的記憶體會限制為指定的值。 如果 RPC 呼叫超出記憶體限制,則會終止,並顯示錯誤 701、嚴重性 17、狀態 21、訊息: There is insufficient system memory in resource pool 'resource-pool-name' to run this query. 終止 RPC 呼叫會釋放 RPC 參數所耗用的記憶體,並避免伺服器進程終止的風險。 如需詳細資訊,請參閱 MSSQLSERVER_701

可用性

下列 SQL 平臺和版本提供此組態選項:

  • SQL Server 2019 (15.x) CU 26 和更新版本
  • SQL Server 2022 (16.x) CU 13 和更新版本
  • SQL Server 2025 (17.x)
  • Azure SQL 受控執行個體

備註

您可以使用 sys.dm_os_memory_clerks 並將 USERSTORE_SXC 作為記憶體管理員類型,還有使用 sys.dm_os_memory_objects 並將 MEMOBJ_PROCESSRPC 作為記憶體物件類型,透過 RPC 參數來監視伺服器的記憶體總耗用量。

如果您發現 USERSTORE_SXC 記憶體 Clerk 或 MEMOBJ_PROCESSRPC 記憶體物件耗用不成比例的記憶體數量,請考慮下列緩解措施:

  • 修改伺服器組 max RPC request params (KB) 態,以限制單一批次 RPC 呼叫所耗用的記憶體數量。 最佳值取決於 RPC 呼叫中使用的參數數據大小,以及同時執行的 RPC 呼叫數目。 一開始設定較大的值,然後在執行 RPC 呼叫時開始減少值,並監測記憶體消耗及發生記憶體不足錯誤(錯誤 701,狀態 21)的情況。 目標是將記憶體耗用量保持在控制之下,同時將記憶體不足錯誤的發生降到最低。
  • 將大型 RPC 呼叫分割成較小的批次。 例如,不要在單一 RPC 呼叫中使用 100,000 INSERT 個語句,而是在每個呼叫中發出 10 個具有 10,000 個語句的 RPC 呼叫。
  • 避免使用 RPC 呼叫批量插入資料。 請改用用戶端驅動程式的大量複製方法,例如 .NET 中的 SqlBulkCopy for SqlClient,或在 Java 中為 JDBC 使用 SQLServerBulkCopy 。 如需詳細資訊,請參閱大容量導入和匯出數據(SQL Server)。

範例

A。 設定 RPC 呼叫參數記憶體上限

下列範例會將單一 RPC 呼叫可使用的最大 RPC 參數記憶體設定為 1 MB。

EXECUTE sp_configure 'show advanced options', 1;

RECONFIGURE;
GO

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

RECONFIGURE;
GO

B. 監控當前總計和最大值的 RPC 參數記憶體

下列範例會監視 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';