이 문서에서는 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: 결과를 텍스트로 출력
쿼리 결과를 텍스트로 출력하도록 쿼리 창을 구성합니다. 텍스트 출력은 표보다 적은 메모리를 사용하며 쿼리 결과를 표시하기에 충분할 수 있습니다. 이렇게 변경하려면 다음 단계를 수행합니다.
- 쿼리 창을 마우스 오른쪽 단추로 클릭합니다.
- 결과를 선택합니다.
- 결과를 텍스트로 선택합니다.
방법 2: 파일에 결과 출력
쿼리 결과를 파일에 출력하도록 쿼리 창을 구성합니다. 파일 출력은 최소한의 메모리를 사용합니다. 이렇게 하면 결과 집합을 저장하기 위해 더 많은 메모리가 예약됩니다. 이렇게 변경하려면 다음 단계를 수행합니다.
- 쿼리 창을 마우스 오른쪽 단추로 클릭합니다.
- 결과를 선택하세요.
- 결과 파일로 저장을 선택하세요.
- 쿼리를 실행한 다음 결과 파일을 저장할 위치를 선택합니다.
방법 3: sqlcmd 사용
SSMS 대신 sqlcmd 유틸리티 를 사용하여 SQL 쿼리를 실행합니다. 이 메서드를 사용하면 SSMS UI에 필요한 리소스 없이 쿼리를 실행할 수 있습니다. 또한 64비트 버전의 Sqlcmd.exe 사용하여 32비트 SSMS 프로세스에 영향을 주는 메모리 제한을 방지할 수 있습니다.