SSMS(SQL Server Management Studio)에서 쿼리를 실행할 때 OutOfMemoryException 오류

이 문서에서는 SSMS(SQL Server Management Studio)를 사용하여 많은 양의 데이터를 반환하는 SQL 쿼리를 실행할 때 발생하는 문제를 해결하는 데 도움이 됩니다.

원래 제품 버전: SQL Server
원래 KB 번호: 2874903

증상

SSMS를 사용하여 매우 많은 양의 데이터를 반환하는 SQL 쿼리를 실행하는 경우 다음과 유사한 오류 메시지가 표시됩니다.

일괄 처리를 실행하는 동안 오류가 발생했습니다. 오류 메시지: 'System.OutOfMemoryException' 형식의 예외가 throw되었습니다.

원인

이 문제는 SSMS에 큰 결과에 할당할 메모리가 부족하기 때문에 발생합니다. SSMS는 32비트 프로세스입니다. 따라서 2GB의 사용자 모드 가상 메모리로 제한됩니다. SSMS는 결과 창에서 데이터베이스 필드당 표시할 수 있는 텍스트의 양에 대한 인위적인 제한을 적용합니다. 이 제한은 그리드 모드에서는 64KB, 텍스트 모드에서는 8KB입니다. 결과 집합이 너무 크면 쿼리 결과를 표시하는 데 필요한 메모리가 SSMS 프로세스의 2GB 제한을 초과할 수 있습니다. 따라서 결과 집합이 크면 증상 섹션에 언급된 오류가 발생할 수 있습니다 .

해결 방법

이 문제를 해결하려면 다음 방법 중 하나를 시도해 보세요.

메서드 1: 결과를 텍스트로 출력

쿼리 결과를 텍스트로 출력하도록 쿼리 창을 구성합니다. 텍스트 출력은 표보다 적은 메모리를 사용하며 쿼리 결과를 표시하기에 충분할 수 있습니다. 이렇게 변경하려면 다음 단계를 수행합니다.

  1. 쿼리 창을 마우스 오른쪽 단추로 클릭합니다.
  2. 결과를 선택합니다.
  3. 결과를 텍스트로 선택합니다.

방법 2: 파일에 결과 출력

쿼리 결과를 파일에 출력하도록 쿼리 창을 구성합니다. 파일 출력은 최소한의 메모리를 사용합니다. 이렇게 하면 결과 집합을 저장하기 위해 더 많은 메모리가 예약됩니다. 이렇게 변경하려면 다음 단계를 수행합니다.

  1. 쿼리 창을 마우스 오른쪽 단추로 클릭합니다.
  2. 결과를 선택하세요.
  3. 결과 파일로 저장을 선택하세요.
  4. 쿼리를 실행한 다음 결과 파일을 저장할 위치를 선택합니다.

방법 3: sqlcmd 사용

SSMS 대신 sqlcmd 유틸리티 를 사용하여 SQL 쿼리를 실행합니다. 이 메서드를 사용하면 SSMS UI에 필요한 리소스 없이 쿼리를 실행할 수 있습니다. 또한 64비트 버전의 Sqlcmd.exe 사용하여 32비트 SSMS 프로세스에 영향을 주는 메모리 제한을 방지할 수 있습니다.