다음을 통해 공유


서버 구성: 최대 RPC 요청 매개 변수(KB)

적용 대상:SQL ServerAzure SQL Managed Instance

max RPC request params (KB) 서버 구성 옵션은 단일 일괄 처리된 RPC 호출에 대해 RPC(원격 프로시저 호출) 매개 변수에 사용되는 메모리 양을 제한합니다. 일괄 처리된 RPC 호출에는 연결된 매개 변수 집합을 사용하여 서버에 단일 일괄 처리로 제출되는 하나 이상의 문이 포함됩니다.

기본적으로 일괄 처리된 RPC 호출의 매개 변수에 사용되는 서버 메모리는 무제한입니다. RPC 매개 변수에서 사용하는 총 메모리가 지나치게 큰 경우 메모리 부족으로 인해 현재 서버 프로세스가 종료될 수 있습니다.

구성을 max RPC request params (KB) 0이 아닌 값으로 설정하면 일괄 처리된 단일 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를 메모리 개체 형식으로 사용하여 MEMOBJ_PROCESSRPC와 같은 RPC 매개 변수로 총 서버 메모리 사용량을 모니터링할 수 있습니다.

USERSTORE_SXC 메모리 클럭 또는 MEMOBJ_PROCESSRPC 메모리 개체가 불균형적으로 많은 양의 메모리를 사용하는 것을 관찰하면 다음 완화를 고려하십시오.

  • max RPC request params (KB) 단일 일괄 처리 RPC 호출에서 사용되는 메모리 양을 제한하도록 서버 구성을 수정합니다. 최적 값은 RPC 호출에 사용되는 매개 변수 데이터의 크기와 동시에 실행되는 RPC 호출 수에 따라 달라집니다. 처음에는 더 큰 값을 설정한 다음, RPC 호출이 실행되는 동안 메모리 사용량 및 메모리 부족 오류 발생(오류 701, 상태 21)을 모니터링하는 동안 값을 줄이기 시작합니다. 목표는 메모리 부족 오류 발생을 최소화하면서 메모리 사용량을 제어하는 것입니다.
  • 큰 RPC 호출을 더 작은 일괄 처리로 분할합니다. 예를 들어 단일 RPC 호출에서 100,000 INSERT 개의 문을 사용하는 대신 각 호출에서 10,000개의 문이 있는 10개의 RPC 호출을 실행합니다.
  • RPC 호출을 사용하여 데이터를 대량으로 삽입하지 않습니다. 대신 클라이언트 드라이버의 대량 복사 메서드(예: .NET의 SqlClient용 SqlBulkCopy 또는 Java의 JDBC용 SQLServerBulkCopy )를 사용합니다. 자세한 내용은 대량 데이터 가져오기 및 내보내기(SQL Server)를 참조하세요.

예시

A. 최대 RPC 호출 매개 변수 메모리 설정

다음 예제에서는 단일 RPC 호출에서 사용할 수 있는 최대 RPC 매개 변수 메모리를 1MB로 설정합니다.

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